《CSS揭秘》这本书很是不错,充满了干货和惊喜。如下主要是关于使用渐变作出来的一些效果的笔记。请用最新的现代浏览器观看。css
首先要回顾下一个css语句: html
linear-gradient([ [ <angle> | to <side-or-corner> ] ,]? <color-stop>[, <color-stop>]+)
这是一个线性渐变,第一参数是渐变方向,是可选的。能够是角度,angle的值是度数,好比45deg,90deg。也能够使用to side-or-corner .好比 to left(从右到左) ,to bottom(从上到下);第二个和第三个参数都是渐变颜色。因此最简单的写法能够有:css3
background: linear-gradient(aquamarine,orange)
默认是从上往下渐变。但若是咱们不想要渐变,就要颜色条。诀窍就是两种颜色之间不要留空隙,由于留了空隙就会出现渐变的过渡效果。因此咱们能够设置各占50%。这个50%表明颜色位置。也能够是长度单位。浏览器
background: linear-gradient(aquamarine 50%,orange 50%)
若是咱们须要多种颜色呢,好比一个蓝白红。ide
background: linear-gradient(90deg,aqua 0 ,aqua 33%,white 0 ,white 67%,crimson 0 ,crimson )
注意到三个0和最后的crimon颜色没有色标。第一个aqua 0 ,aqua 33% 表示aqua占了33%,而第二个白色倒是 white 0 ,white 67%,看上去是占了67%,实际上是从33%开始的。学习
若是某个色标的位置比它以前的位置都要小,则色标的位置会被设置为前面因此色标位置的最大值。ui
因此第二个0表明的是33%,第三个0表明的是67%。你能够将0改为小于这两个值的值,效果是同样的。而最后一个颜色,不用色标也会自动填充。因此若是咱们只想画个线条,渐变颜色能够使用透明色:spa
linear-gradient(white 2px, transparent 0)
但若是咱们要实现重复效果,还须要background-size的配合。background-size默认是 100% 100%。但若是定义了大小,等因而把整个面积分割成重复的小块。3d
.grid { width: 225px; height: 225px; background: #58a; background-image: linear-gradient(white 2px, transparent 0),linear-gradient(90deg,white 2px,transparent 0); background-size: 75px 75px, 75px, 75px; }
第一个渐变是将225px 横着分红了三等分。而后第二个渐变,垂直分红了三等分。这是肉眼看到的效果,实际上是9个75px*75px的方块拼出来的结果。code
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: 75px 75px, 75px 75px,15px 15px,15px 15px;
那这个网格实现就简单了。再叠加渐变,每一个75再分红5个15。这效果看着像瓷砖。
可是如何画出一个棋盘呢?注意线条不是连贯的哦。如上图,根据上面background-size的思路,咱们知道这样的棋盘是有多个这样的正方形组成的。
而这两个正方形,又是由四个三角形组成的。线性渐变的一个特色就是会在background-size的区域里,一条线上只有一种颜色。
background-image: linear-gradient(45deg, #bbb 25%, transparent 0),linear-gradient(45deg, transparent 75%,#bbb 0),linear-gradient(45deg, #ffbb33 25%, transparent 0),linear-gradient(45deg, transparent 75%,#ffbb33 0);
background-size: 30px 30px;
background-position: 0 0, 15px 15px,15px 15px, 30px 30px;
注意到还使用了一组background-position,第一个#bbb色是占了45度方向的25%,而第二个#bbb色是占45度方向最后的25%。若是把第二个三角形换成红色,而后位置从0,0开始就一目了然了。
background-image: linear-gradient(45deg, #bbb 25%, transparent 0),linear-gradient(45deg, transparent 75%,red 0);
background-size: 30px 30px;
background-position: 0 0, 0px 0px,15px 15px, 30px 30px;
将红色三角形位置改成15px,15px 就凑成了一个正方形。同理再叠加出一个正方形就获得了棋盘的格式。同理,咱们能够拼凑一个歇着的格子。
让三角形每次转90度,且没必要移动位置。
background-image: linear-gradient(45deg, red 0, red 25%,transparent 0), linear-gradient(135deg, orange 0, orange 25%,transparent 0),linear-gradient(225deg, yellow 0, yellow 25%,transparent 0),linear-gradient(315deg, green 0, green 25%,transparent 0)
有了上面的积累,画一个斜格子就简单了:
background-image: linear-gradient(45deg,transparent 49% ,black 0,black 51% ,transparent 0), linear-gradient(135deg,transparent 49% ,black 0,black 51% ,transparent 0);
background-size: 30px 30px;
至关因而每一个单元就渐变了两条斜线。
一直去拼这种单元可能让你有点烦,因而出来了repeating-linear-gradient。
background: repeating-linear-gradient( 45deg, transparent, transparent 1em, moccasin 0, moccasin 2em, transparent 0, transparent 3em, powderblue 0, powderblue 4em, transparent 0, transparent 5em, lavender 0, lavender 6em, transparent 0, transparent 7em, beige 0, beige 8em), repeating-linear-gradient( -45deg, transparent, transparent 1em, khaki 0, khaki 2em, transparent 0, transparent 3em, beige 0, beige 4em, transparent 0, transparent 5em, peachpuff 0, peachpuff 6em );
注意到颜色都是成对出现。这样才会出现咱们的色条。注意这里使用了background-blend-mode: multiply; 混合模式。否则效果没有这么好看。
思路和上面同样,使用径向渐变叠加和错位
background-image:radial-gradient(#fff 5px,transparent 0),radial-gradient(#fff 10px, transparent 0);
background-size: 40px;
background-position: 0 0, 20px 20px;
沙发这个效果比较复杂,使用了径向渐变制做圆点和阴影,线性渐变勾勒出线条。
background:
radial-gradient(hsl(0, 100%, 27%) 4%, hsl(0, 100%, 18%) 9%, hsla(0, 100%, 20%, 0) 9%) 0 0,
radial-gradient(hsl(0, 100%, 27%) 4%, hsl(0, 100%, 18%) 8%, hsla(0, 100%, 20%, 0) 10%) 50px 50px,
radial-gradient(hsla(0, 100%, 30%, 0.8) 20%, hsla(0, 100%, 20%, 0)) 50px 0,
radial-gradient(hsla(0, 100%, 30%, 0.8) 20%, hsla(0, 100%, 20%, 0)) 0 50px,
radial-gradient(hsla(0, 100%, 20%, 1) 35%, hsla(0, 100%, 20%, 0) 60%) 50px 0,
radial-gradient(hsla(0, 100%, 20%, 1) 35%, hsla(0, 100%, 20%, 0) 60%) 100px 50px,
radial-gradient(hsla(0, 100%, 15%, 0.7), hsla(0, 100%, 20%, 0)) 0 0,
radial-gradient(hsla(0, 100%, 15%, 0.7), hsla(0, 100%, 20%, 0)) 50px 50px,
linear-gradient(45deg, hsla(0, 100%, 20%, 0) 49%, hsla(0, 100%, 0%, 1) 50%, hsla(0, 100%, 20%, 0) 70%) 0 0,
linear-gradient(-45deg, hsla(0, 100%, 20%, 0) 49%, hsla(0, 100%, 0%, 1) 50%, hsla(0, 100%, 20%, 0) 70%) 0 0
;
background-color: #300;
background-size: 100px 100px;
radial-gradient( [ [ circle || <length> ] [ at <position> ]? , | [ ellipse || [ <length> | <percentage> ]{2} ] [ at <position> ]? , | [ [ circle | ellipse ] || <extent-keyword> ] [ at <position> ]? , | at <position> , ]? <color-stop> [ , <color-stop> ]+ )
看上去有点复杂,[]表示一个参数,[]?表示这个参数可选,| 表示这两个参数二选一,||表示这两个参数能够同时存在,','号表示这个参数结束。包含形状,中心点位置,扩展关键字和颜色。形状分圆形(circle)和椭圆(ellipse),位置能够是长度/百分比/简写的left、center等。颜色和线性渐变同样,好比渐变一个太阳:
background:radial-gradient(at 45px 45px,rgb(248, 242, 209),gold,#FFF);
不过这里的at不只影响着渐变的中心点并且还影响着渐变的形状。 若是加上background-size咱们能够获得一块饼干:想吃么 (*^__^*) ……
而扩展关键字主要有下面几种状况
closest-side:指定径向渐变的半径长度为从圆心到离圆心最近的边
background:radial-gradient(circle closest-side ,aqua,gold);
closest-corner:指定径向渐变的半径长度为从圆心到离圆心最近的角
background:radial-gradient(circle closest-corner ,aqua,gold);
farthest-side:指定径向渐变的半径长度为从圆心到离圆心最远的边
background:radial-gradient(circle farthest-side at 30% 30% ,aqua,gold);
farthest-corner:指定径向渐变的半径长度为从圆心到离圆心最远的角
background:radial-gradient(circle farthest-corner at 30% 30% ,aqua,gold);
若是咱们想画出色圈呢,这就要用到线性渐变中的技巧。
background:radial-gradient(white 0,white 10%,red 0, red 20%,white 0,white 30%,red 0,red 40%,white 0,white 50%,red 0,red 60%,white 0,white 100%);
两种颜色交替出现。而后也能够画个蓝天白云: 接近小朋友的画风...
叠加来个百叶窗:
小结:这些效果仍是蛮有意思的,这一篇主要是学习了 linear-gradient,repeating-linear-gradient以及background-size、background-position来实现网格效果,最后还用到了radial-gradient,径向渐变的花样更多,全部的效果基本都是基于渐变叠加和重复,更多的效果能够参考下面的连接。
http://lea.verou.me/css3patterns/
http://bennettfeely.com/gradients/
http://www.cnblogs.com/lhb25/archive/2013/02/24/css3-radial-gradient.html
群中有此书的分享,不止于技术书籍。