前面的话

  本文将详细介绍CSS背景效果

条纹背景

【双条纹背景】

  background:linear-gradient(#fb3 50%, #58a 50%);
background-size: 100% 30px;

  CSS标准规定:如果某个色标的位置值比整个列表中在它之前的色标的位置值都要小,则该色标的位置值会被设置为它前面所有色标位置值的最大值

  因此,第二个色标值可以设置为0

  background:linear-gradient(#fb3 50%, #58a 0);
background-size: 100% 30px;

【多条纹背景】

  如果要创建超过两种颜色的条纹,也是很容易的

background:linear-gradient(#fb3 33.3%, #58a 0, #58a 66.6%, yellowgreen 0);
background-size: 100% 45px;

【垂直条纹】

  垂直条纹的代码跟水平条纹几乎是一样的,差别主要在于需要在开头加上一个额外的参数来指定渐变的方向,然后把background-size的值颠倒一下

  background:linear-gradient(to right,#fb3 50%, #58a 0);
background-size: 30px 100% ;

【45度斜向条纹】

  思路如下:单个贴片包含四个条纹,只有这样才能做到无缝拼接

  background:linear-gradient(45deg,#fb3 25%, #58a 0,#58a 50%,#fb3 0, #fb3 75%, #58a 0);
background-size: 30px 30px;

  使用循环渐变更加简单

background:repeating-linear-gradient(45deg,#fb3, #fb3 15px, #58a 0,#58a 30px);

【任意角度斜向条纹】

background:repeating-linear-gradient(60deg,#fb3, #fb3 15px, #58a 0,#58a 30px);

【同色系条纹】

  在大多数情况下,我们想要的条纹图案并不是由差异极大的几种颜色组成的,这些颜色往往属于同一色系,只是在明度方面有着轻微的差异

background:repeating-linear-gradient(60deg,#79b, #79b 15px, #58a 0,#58a 30px);

  但是,这两种颜色之间的关系在代码中并没有体现出来。此外,如果想要改变这个条纹的主色调,甚至需要修改四处

  一种更好的方法是不再为每种条纹单独指定颜色,而是把最深的颜色指定为背景色,同时把半透明白色的条纹叠加在背景色之上来得到浅色条纹

  background: #58a;
background-image:repeating-linear-gradient(30deg,hsla(0,0%,100%,.1), hsla(0,0%,100%,.1) 15px, transparent 0,transparent 30px);

  现在只需要修改一个地方就可以改变所有颜色了。还得到了一个额外的好处,对于那些不支持css渐变的浏览器来说,这里的背景色还起到了回退的作用

网格背景

【桌布效果】

  把多个渐变图案组合起来,让它们透过彼此的透明区域显现时,就会形成各种网格。例如,把水平和垂直的条纹叠加起来,得到桌布图案

  background: white;
background-image:linear-gradient(90deg,rgba(200,0,0,.5) 50%, transparent 0),linear-gradient(rgba(200,0,0,.5) 50%, transparent 0);
background-size: 30px 30px;

【图纸辅助线】

  某些情况下,希望网格中每个格子的大小可以调整,而网格线条的粗细同时保持固定。例如,类似图纸辅助线的网格

  background: #58a;
background-image:linear-gradient(90deg,white 1px, transparent 0),linear-gradient(white 1px, transparent 0);
background-size: 30px 30px;

【蓝图网格】

  甚至可以把两幅不同线宽、不同颜色的网格图案叠加起来,得到一个更加逼真的蓝图网格

  background: #58a;
background-image:linear-gradient(90deg,white 2px, transparent 0),linear-gradient(white 2px, transparent 0),linear-gradient(90deg,hsla(0,0%,100%,0.3) 1px, transparent 0),linear-gradient(hsla(0,0%,100%,0.3) 1px, transparent 0);
background-size: 75px 75px,75px 75px,15px 15px,15px 15px;

波点背景

【圆点阵列】

  前面,一直在用线性渐变生成图案。但是,径向渐变同样也是非常实用的,因为它允许创建圆形、椭圆,或是它们的一部分。径向渐变能够创建的最简单的图案是圆点阵列

  background: #655;
background-image:radial-gradient(tan 30%,transparent 0);
background-size: 30px 30px;

【波点图案】

  可以生成两层圆点阵列图案,并把它们的背景定位错开,这样就可以得到真正的波点图案

  background: #655;
background-image:radial-gradient(tan 30%,transparent 0),radial-gradient(tan 30%,transparent 0);
background-size: 30px 30px;
background-position: 0 0 ,15px 15px;

  为了达到效果,第一层背景的偏移定位值必须是贴片宽高的一半。这意味着如果要改动贴片的尺寸,需要修改四处

  最好使用SASS将它转换成mixin

@mixin polka($size,$dot,$base,$accent){
background: $base;
background-image:radial-gradient($accent $dot,transparent 0),radial-gradient($accent $dot,transparent 0);
background-size: $size $size;
background-position: 0 0 ,$size/2 $size/2;
} @include polka(30px,30%,$655,tan);

棋盘背景

  棋盘图案在很多场景下都会用到。比如说,相对于单调的纯色背景来说,具有细微对比度的棋盘图案可能就是一个有趣的替代品。在各种应用程序的界面中,灰色的棋盘图案已经是用于表示透明色的事实标准

【CSS】

  background:#eee;
background-image: linear-gradient(45deg,#bbb 25%,transparent 0),linear-gradient(45deg,transparent 75%,#bbb 0),linear-gradient(45deg,#bbb 25%,transparent 0),linear-gradient(45deg,transparent 75%,#bbb 0);
background-size: 30px 30px;
background-position: 0 0 ,15px 15px,15px 15px,30px 30px;

  这段代码还可以稍稍优化,可以把这些处在贴片顶角的三角形两两组合起来(即把第一组和第二组合并为一层渐变,把第三组和第四组合并为一层渐变),然后还可以把深灰色改成半透明的黑色——这样只需要修改底色就可以改变整个棋盘的色调,不需要单独调整各层渐变的色标了

  background:#eee;
background-image: linear-gradient(45deg,rgba(0,0,0,0.25) 25%,transparent 0,transparent 75%,rgba(0,0,0,0.25) 0),linear-gradient(45deg,rgba(0,0,0,0.25) 25%,transparent 0,transparent 75%,rgba(0,0,0,0.25) 0);
background-size: 30px 30px;
background-position: 0 0 ,15px 15px;

  下面来使用SASS的mixin来简化代码

  @mixin checkerboard($size,$base,$accent:rgba(0,0,0,0.25)){
background:$base;
background-image: linear-gradient(45deg,$accent 25%,transparent 0,transparent 75%,$accent 0),linear-gradient(45deg,$accent 25%,transparent 0,transparent 75%,$accent 0);
background-size: 2*$size 2*$size;
background-position: 0 0 ,$size $size;
}
@inclue checkerboard(15px,#58a,tan);

【SVG】

  这样的代码量不能算少,所以转到SVG方案可能是更好的选择

<svg xmlns="http//www.w3.org/2000/svg" width="100" height="100" fill-opacity=".25">
<defs>
<pattern id="pattern1" width=0.2 height=0.2 >
<rect x="10" width="10" height="10"/>
<rect y="10" width="10" height="10"/>
</pattern>
</defs>
<rect id="rect1" x="0" y="0" width="100" height="100" fill="url(#pattern1)" />
</svg>

  可能有人会说,CSS渐变可以节省HTTP请求。但实际上,可以把SVG文件以dataURL的方式内嵌到样式表中

  [注意]SVG中的标签的属性值一定要添加引号,否则通过dataURL的方式引入的SVG文件无法显示成功

div{
height: 100px;
width: 100px;
background: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" fill-opacity=".25">\
<defs>\
<pattern id="pattern1" width="0.2" height="0.2" >\
<rect x="10" width="10" height="10"/>\
<rect y="10" width="10" height="10"/>\
</pattern>]\
</defs>\
<rect id="rect1" x="0" y="0" width="100" height="100" fill="url(#pattern1)"/>\
</svg>');
}

伪随机背景

  重现随机性是一个挑战,因为CSS本身没有提供任何随机功能。以条纹为例子。假设得到不同颜色和不同宽度的垂直条纹,并且不能让人看出贴片平铺时的接缝。第一个想法可能就是创建一个具有四种颜色的条纹图案

  background:linear-gradient(90deg,#fb3 15%,#655 0, #655 40%,#ab4 0, #ab4 65%, hsl(20,40%,90%) 0);
background-size: 80px 100%;

  为了更真实地模拟条纹的随机性,把这组条纹从一个平面拆散为多个图层:一种颜色作为底色,另三种颜色作为条纹,然后再让条纹以不同的间隔进行重复平铺

  background: hsl(20,40%,90%);
background-image:linear-gradient(90deg,#fb3 10px,transparent 0),
linear-gradient(90deg,#ab4 20px,transparent 0),
linear-gradient(90deg,#655 20px,transparent 0);
background-size: 80px 100%,60px 100%,40px 100%;

  因为最顶层贴片的重复规律最容易被察觉,应该把平铺间距最大的贴片安排在最顶层

  这里贴片的尺寸实际上就是所有background-size的最小公倍数,而40、60和80的最小公倍数正是240

  根据这个逻辑,要让这种随机性更加真实,得把贴片的尺寸最大化。为了让最小公倍数最大化,这些数字最好是"相对质数。在这种情况下,它们的最小公倍数就是它们的乘积

  下列代码中,平铺贴片的尺寸现在是41×61×83=207583像素,比任何屏幕分辨率都要大。这个技巧被定名为“蝉原则”

  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 41px,transparent 0);
background-size: 41px 100%,61px 100%,83px 100%;

斑马线背景

  下面的斑马线背景是与文本紧密结构的一种背景图案

  padding:.5em;
line-height: 1.5;
background:beige linear-gradient(rgba(0,0,0,0.2) 50%,transparent 0) content-box 0 0/ auto 3em;

CSS背景效果的更多相关文章

  1. 炫酷 CSS 背景效果的 10 个代码片段

    在现代网页设计中,大背景图设计非常流行.随着高清(现在是4K)显示器的出现,越来越多的网页设计师使用大背景图来填充屏幕. 因为这样可以造成很大的视觉冲击力,并有助于更好的传递所要表现的内容. 但是,如 ...

  2. Matplotlib数据可视化(3):文本与轴

      在一幅图表中,文本.坐标轴和图像的是信息传递的核心,对着三者的设置是作图这最为关心的内容,在上一篇博客中虽然列举了一些设置方法,但没有进行深入介绍,本文以围绕如何对文本和坐标轴进行设置展开(对图像 ...

  3. 妙用 CSS 构建花式透视背景效果

    本文将介绍一种巧用 background 配合 backdrop- filter 来构建有趣的透视背景效果的方式. 本技巧源自于一名群友的提问,如何构建如 ElementUI 文档的一种顶栏背景特效, ...

  4. 【原创】CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(5)使用放射渐变制作光影效果

    阴影效果通常用来表现光线投射在物体上的感觉,如果想制作一个如图5.19所示的文字光影效果,就可以使用背景的线性渐变进行构建. 图5.19可以看到有类似光束照射文字的效果,很好地突出了文字.这实现起来很 ...

  5. Css样式基础

    1.Css的语法 CSS的语法主要由两个部分组成,一个是选择器,一个是属性. 选择器又分为以下几种: 1.元素选择器:即Html标签去掉括号的就是元素 2.类选择器:所谓的类就是说class=“名称” ...

  6. 【转】CSS设置DIV背景色渐变显示

     [原链接]http://www.2cto.com/kf/201310/248187.html <style type="text/css">     .linear{ ...

  7. 新特性AAtitti css3 新特性attilax总结titti css

    Atitti css3 新特性attilax总结 图片发光效果2 透明渐变效果2 文字描边2 背景拉伸2 CSS3 选择器(Selector)4 @Font-face 特性7 Word-wrap &a ...

  8. 深入理解CSS背景

    前面的话 背景和字体一样,是一个复合属性,而且它是一个使用频率很高的属性.在CSS3中,背景属性在保持以前用法的同时,增加了新的相关属性.本文将详细介绍关于背景的知识 背景颜色 背景色backgrou ...

  9. css通用小笔记01——导航背景

    很多刚接触前端的可能遇到一些css能解决的小问题,我现在总结了一些,将会逐渐和大家分享,先是导航的背景问题,在网页中常常看到,当鼠标放到一个导航按钮上面是,就会出现一些特效,比如背景,这是最常用的,我 ...

随机推荐

  1. 52. leetcode 96. Unique Binary Search Trees

    96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) tha ...

  2. Backpropagation 算法的推导与直观图解

    摘要 本文是对 Andrew Ng 在 Coursera 上的机器学习课程中 Backpropagation Algorithm 一小节的延伸.文章分三个部分:第一部分给出一个简单的神经网络模型和 B ...

  3. 关于appcompat_v7兼容包的详细说明

    1.appcompat_v7包的由来? appcompat_v7是Google提供的向下兼容包,是针对API level 7(Android2.1)及以上版本所开发的,其作用是为了让兼容低版本API( ...

  4. hdu--2570--迷瘴

    #include<iostream> #include<vector> #include<algorithm> using namespace std; int m ...

  5. linux 自动备份数据库

    首先在你的项目合适的地方建立一个执行备份数据库的脚本 下面我建立一个叫 mysqlBackups.sh 的脚本内人如下: #!/bin/sh # Database info DB_NAME=" ...

  6. ArrayList 和Vector ,HashTable和HashMap异同

    相同点: 1.都实现了List接口(List接口继承自Collection接口) 2.有序集合,数据可重复,可按索引号取值(而HashSet无序,不可重复) 不同点: 1.Vector是线程安全的,而 ...

  7. python基础===Python 代码优化常见技巧

    Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...

  8. Java入门——(5)Java API

      关键词:String类.StringBuffer类.System类.Math类.Random类.Date类.Calendar类.DateFormat类   API (Application Pro ...

  9. 优先级队列Priority_queue

    定义 拥有权值观点的queue,,一个是返回最高优先级对象,一个是在底端添加新的对象.这种数据结构就是优先级队列(Priority Queue) . 实现 利用max_heap完成,以vector表现 ...

  10. 获取token之后,再调用匿名方法

    js获取token bpm.api.beginDownload = function (filePath, fileName) { var url = "/Home/GetToken&quo ...