资讯专栏INFORMATION COLUMN

CSS3实现多种背景效果

Scliang / 2413人阅读

摘要:灵活的背景定位灵活的背景定位实现效果将背景图定位到距离容器底边且距离右边的位置。棋盘实现效果实现代码关键样式其它样式伪随机背景伪随机背景实现效果重复平铺的几何图案很美观,但看起来可能有一些呆板。

灵活的背景定位

实现效果:

将背景图定位到距离容器底边 10px 且距离右边 20px 的位置。

background-position 方案

实现代码:

海盗密码
div {
    /* 关键样式 */
    background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
    background-position: right 20px bottom 10px;
    
    /* 其它样式 */
    max-width: 10em;
    min-height: 5em;
    padding: 10px;
    color: white;
    font: 100%/1 sans-serif;
}

实现要点:

  • background-position 允许我们指定背景图片距离任意角的偏移量,只要我们在偏移量前面指定关键字。本例就是设置背景图片离右边缘 20px,离底边 10px。
  • 为了兼容不支持 background-position 这种语法的浏览器,提供一个合适的回退方案,那就是使用 backgroundbottom right 来定位,虽然不能设置具体的偏移量。

background-origin 方案

实现代码:

海盗密码
div {
    /* 关键样式 */
    background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
    background-origin: content-box;
    padding: 10px 20px;
    
    /* 其它样式 */
    max-width: 10em;
    min-height: 5em;
    color: white;
    font: 100%/1 sans-serif;
}

实现要点:

  • background-origin 默认值是 padding-box,也就说我们设置 backgroundtop left 时左上角是 padding box(内边距的外沿框)的左上角。
  • 在本例中设置 background-origincontent-box,那么就相对于 content box(内容区的外沿框)的左上角,那么也就是背景图离容器的右边和底边的偏移量是跟着容器的 padding 值走了,那设置 padding: 10px 20px; 自然就可以实现本例的效果了。

calc() 方案

实现代码:

海盗密码
div {
    /* 关键样式 */
    background: url(http://csssecrets.io/images/code-pirate.svg)
                no-repeat bottom right #58a;
    background-position: calc(100% - 20px) calc(100% - 10px);
    
    /* 其它样式 */
    max-width: 10em;
    min-height: 5em;
    padding: 10px;
    color: white;
    font: 100%/1 sans-serif;
}

实现要点:

  • 使用 calc 来动态计算使得背景图的左上角水平偏移 100% - 20px,垂直偏移 100% - 10px

条纹背景

水平条纹

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: linear-gradient(#fb3 50%, #58a 0);
    background-size: 100% 30px;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • 通过 linear-gradient(#fb3 50%, #58a 0) 生成一个背景图,该背景图分为上下不同实色的两部分,占满容器大小。
  • 然后通过 background-size:100% 30px; 设置该背景图的宽高(宽为容器宽度,高为30px),由于默认情况下背景是重复平铺的,这样整个容器就铺满高为 30px 的双色水平条纹。

垂直条纹

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: linear-gradient(to right, #fb3 50%, #58a 0);
    background-size: 30px 100%;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • 通过 linear-gradient(to right, #fb3 50%, #58a 0) 生成一个背景图,该背景图分为左右不同实色的两部分(to right 改变渐变的方向,从上下该为左右),占满容器大小。
  • 然后通过 background-size:30px 100%; 设置该背景图的宽高(宽为 30px,高为容器高度),由于默认情况下背景是重复平铺的,这样整个容器就铺满宽为 30px 的双色水平垂直条纹。

斜向条纹

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: linear-gradient(45deg, 
              #fb3 25%, #58a 0, #58a 50%,
              #fb3 0, #fb3 75%, #58a 0);
    background-size: 42.4px 42.4px;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • 通过 linear-gradient(45deg, #fb3 25%, #58a 0, #58a 50%,#fb3 0, #fb3 75%, #58a 0) 生成一个如下图的可重复铺设的背景图(重点是修改渐变方向为 45 度,四条条纹)。

  • 然后通过 background-size: 42.4px 42.4px; 设置背景尺寸。42.4px 是通过勾股定理求得(在我们的斜向条纹中,背景尺寸指定的是直角三角形的斜边长度,但条纹的宽度实际上是直角三角形的高,所以要让条纹宽度为 15px,就必须近似设置背景尺寸为 42.4px)。

可灵活设置角度的斜向条纹

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: repeating-linear-gradient(60deg, 
              #fb3, #fb3 15px,
              #58a 0, #58a 30px);
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • repeating-linear-gradient 生成色标是无限循环重复的,直到填满整个背景。不需要通过 background-size 设置背景尺寸,而且也不用考虑斜边的问题,因为在渐变轴设置的长度就是条纹的宽度。最重要的一点是可以灵活设置任意角度的条纹,只要修改一处角度就可以。

复杂的背景图案

网格

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: #58a;
    background-image: linear-gradient(white 2px, transparent 0),
                    linear-gradient(90deg, white 2px, transparent 0),
                    linear-gradient(hsla(0,0%,100%,.3) 1px, transparent 0),
                    linear-gradient(90deg, hsla(0,0%,100%,.3) 1px, transparent 0);
    background-size: 50px 50px, 50px 50px,
                    10px 10px, 10px 10px;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • 没有特殊的,看代码吧。

波点

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: #655;
    background-image: radial-gradient(tan 20%, transparent 0),
                      radial-gradient(tan 20%, transparent 0);
    background-size: 30px 30px;
    background-position: 0 0, 15px 15px;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • 使用径向渐变 radial-gradient 来创建圆形、椭圆,或者它们的一部分。本例使用它实现圆点的阵列。
  • 然后生成两层错开的圆点阵列错开叠加到一起,这样就实现波点图案效果了。

棋盘

实现效果:

实现代码:

div {
    /* 关键样式 */
    background: #eee;
    background-image: 
        linear-gradient(45deg, rgba(0,0,0,.25) 25%, transparent 0, transparent 75%, rgba(0,0,0,.25) 0),
        linear-gradient(45deg, rgba(0,0,0,.25) 25%, transparent 0, transparent 75%, rgba(0,0,0,.25) 0);
    background-position: 0 0, 15px 15px;
    background-size: 30px 30px;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

伪随机背景

实现效果:

重复平铺的几何图案很美观,但看起来可能有一些呆板。其实自然界中的事物都不是以无限平铺的方式存在的。即使重复,也往往伴随着多样性和随机性。因此为了更自然一些,我们可能需要实现的背景随机一些,这样就显得自然一点。

实现代码:

div {
    /* 关键样式 */
    background: hsl(20, 40%, 90%);
    background-image: 
        linear-gradient(90deg, #fb3 11px, transparent 0),
        linear-gradient(90deg, #ab4 23px, transparent 0),
        linear-gradient(90deg, #655 23px, transparent 0);
    background-size: 83px 100%, 61px 100%, 41px 100%;
    
    /* 其它样式 */
    width: 300px;
    height: 200px;
}

实现要点:

  • 为了使得背景的重复性小一些,每组的条纹宽度都是质数。

摘自:《CSS揭秘》 第 2 章 背景与边框

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2286.html

相关文章

  • SegmentFault 技术周刊 Vol.38 - 神奇的 CSS

    摘要:层叠即表示允许以多种方式来描述样式,一个元素可以被渲染呈现出多种样式。可以让属性的变化过程持续一段时间,而不是立即生效。比如,将元素的颜色从白色改为黑色,通常这个改变是立即生效的,使用后,将按一个曲线速率变化。 showImg(https://segmentfault.com/img/bVZwyL?w=900&h=385); CSS 的全称是 Cascading Style Sheet...

    elliott_hu 评论0 收藏0
  • CSS学习笔记(七) 背景

    摘要:任何方向上都不重复只让背景图片显示一次。,背景图片就会以段落的中心点为起点。第一个值表示水平位置,第二个值表示垂直位置。拉大图片,使其完全填满背景区保持宽高比。提示渐变是帮我们生成的背景图片。 在CSS里面,每个元素盒子都可以想象成由两个图层组成。 前景层:内容(如文本或图片)和边框。 背景层:用实色填充(使用 background-color 属性),也可以包含任意多个背景图片(...

    Pikachu 评论0 收藏0
  • CSS3做各种样式的饼图

    摘要:通过的旋转属性来实现饼图的效果。封装了一个饼图类,通过实例化来生成各种样式的饼图。以前一直用做饼图的效果,但有时候,一些比较简单的饼图用的话有点杀鸡用牛刀的感觉。并封装了一下,支持多种样式,写了一个。 通过css3的旋转属性来实现饼图的效果。封装了一个饼图类,通过实例化来生成各种样式的饼图。 以前一直用highcharts做饼图的效果,但有时候,一些比较简单的饼图用highcharts...

    Y3G 评论0 收藏0
  • CSS3做各种样式的饼图

    摘要:通过的旋转属性来实现饼图的效果。封装了一个饼图类,通过实例化来生成各种样式的饼图。以前一直用做饼图的效果,但有时候,一些比较简单的饼图用的话有点杀鸡用牛刀的感觉。并封装了一下,支持多种样式,写了一个。 通过css3的旋转属性来实现饼图的效果。封装了一个饼图类,通过实例化来生成各种样式的饼图。 以前一直用highcharts做饼图的效果,但有时候,一些比较简单的饼图用highcharts...

    legendmohe 评论0 收藏0
  • 前端面试之CSS总结(上)

    摘要:重点介绍一下常见的三列布局之圣杯布局和双飞翼布局。两种布局方式的不同之处在于如何处理中间主列的位置圣杯布局是利用父容器的左右内边距定位双飞翼布局是把主列嵌套在后利用主列的左右外边距定位。 CSS总结 由于最近在准备前端方面的面试,所以对自己平常工作中用到的地方做出一些总结。该篇是CSS部分(上),有许多地方叙述的并不是十分详细,只是大致的描述一下,给自己提供一个知识轮廓。本篇中主要描述...

    琛h。 评论0 收藏0

发表评论

0条评论

Scliang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<