纯css3实现斑马线repeating-linear-gradient和linear-gradient的妙用
2016-03-14 03:34
771 查看
今天睡得太早,结果晚上12:45的时候就醒过来了。现在想起小时候,实在是羡慕,那时候9点钟睡了,到早上上学的时候还是迷迷糊糊的要睡觉的感觉,现在特羡慕那时候那么能睡。 今天是周一了,两天的休息日已经过去了,想想挺浪费的,这两天就纯呆家里玩LOL,上周周五下班的时候还给自己定了很多目标结果就执行了一个,而且效果差池人意。 实在是睡不着,趁这个时间,把上周六晚上学到的一个css3背景效果记录下,方便下次查询 这个知识点,我查询了很多博客和文档,部分文字直接复制w3cplus的 注意红色部分的疑问点下面我们要实现这样的一个效果:先讲一下css3多个背景:代码:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{ margin: 0; padding: 0; } .d1{ background-image:url(1.jpg), url(2.jpg); background-size: 50px 50px; background-position: 0 0,30px 0; background-repeat: no-repeat; width: 600px; height: 600px; } </style> </head> <body> <div class="d1"></div> </body> </html>效果:第二个背景被第一个背景给遮住了,第一个背景比第二个背景的z-index高,我不大清楚我这里要表达什么,但知道这个情况就可以了现在我们尝试使用纯
linear-gradient和
background-size实现相同的条纹效果。我们将一个方形的背景加上带有角度
.25em宽度黑色条纹和
.5em宽度的蓝色条纹。一个正方形的对角线是直角边的
√2(根号二)。如果我们知道对角线长度是
.25em + .50em = .75em,然后
background-size的尺寸是
.75em / √2。代码如下所示:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> body{ font-size:40px; } div{ width: 200px; height: 200px; color:#fff; } .pt1_7{ /*1em等于40px 蓝 .25em为10px 黑-------.5em为20px 如果按照正方形的正方形的对角线是直角边的√2 那对角边为 (.25+.5)/Math.sqrt(2)*40 约等于21 转换为px就是 (10+20) /Math.sqrt(2) 约等于21 */ background: linear-gradient(135deg, #000 .25em, #0092b7 0);//疑问1.为什么这里是0而不是.5em? background-size: 21px 21px; } </style> </head> <body> <div class="pt1_7"> 1EM </div> </body> </html>效果:这并不是我想要的;那我们试一下其他方式,例如.25em的黑色条纹放在中间呢?让我们试试!background: linear-gradient(135deg, #0092b7 calc(50% - .125em) /* blue corner */, /*疑问2:这里的.125是怎么得到的*/ #000 0, #000 calc(50% + .125em) /* black stripe */, #0092b7 0 /* blue corner */);效果:是不是比我们的效果有点类似了【除了黑色条纹右下角【黑色渐变结束】和左下角【黑色渐变开始】少了一个类似三角形的一块】细心对比能发现,这些缺块将黑色条纹宽度一半(
.25em的一半就是
.125em)【解答疑问一】。下面我们的工作就是把这个缺的三角形块补回来:background: linear-gradient(135deg, #000 .125em /* black corner */, #0092b7 0, #0092b7 calc(50% - .125em) /* blue stripe */, #000 0, #000 calc(50% + .125em) /* black stripe */, #0092b7 0, #0092b7 calc(100% - .125em) /* blue stripe */, #000 0 /* black corner */);效果:但这不是最终效果,因为我们呢的rem转px存在误差,还有我们多了俩个半条黑色条纹 这直接导致对角线的计算不正确。从左上角到右下角,我们现在有一半的黑色条纹(
.125em),蓝色条纹(
.5em),黑色条纹(
.25em),另一个蓝色条纹(
.5em)和另一个半的黑色条纹(
.125em)。所以加起来对角线是
1.5em。这意味着我们需要改变
background-size的值为
1.5 em / √(2) 1.5 em /√(2)
约等于42px修正后可以看到效果如下图:
/******************************疑问一,今天下班再做详细解答实在是困了,现在是2016/3/14凌晨3:25********************************/在解答疑问一和为什么开篇的时候我示范了多个背景“z-index”,我们先看一个简单实例,这会解开更多疑惑: css:background: linear-gradient(135deg, #000 20px,#0092b7 40px,red 80px,#0092b7 200px);我想写一个由20px #000、20px #0092b7、40px red、120px #0092b7 四条色块组成的div,可看到以上代码实现效果如下:的确可以生成了四条色块组成的渐变div问:可是这又能怎么样?效果本来就是这样的答:background: linear-gradient(135deg, #000 20px,#0092b7 40px);A.代码红色部分为当前颜色在对角线上终止的位置,#000的终止位置为20px,#0092b7为终止位置为40px,但是相邻的色块直接会互相侵染,实际值永远不会是我们写的终止位置的那个数值[如果我们要的是斑马线呢?]B.所有色块的实际终点位置都为div对角线最大值,前面的颜色值生成的色块永远比后面写入的颜色块的z-index高,前面的颜色块会覆盖后面的颜色块[这是开篇前第一个实例的目的]/*我写不下去了,感觉自己还是搞不懂*/径向渐变:http://blog.csdn.net/playboyanta123/article/details/9303857
相关文章推荐
- css实现居中的方法
- 一步步教大家编写酷炫的导航栏js+css实现
- css控制段落效果
- css控制文字属性
- css各种手型集合(css禁止手型)
- css各种手型集合(css禁止手型)
- css各种手型集合(css禁止手型)
- CSS中的块级元素与行级元素
- CSS实现网页布局(一列,两列,三列)
- css基本语法
- CSS动画
- css 实现垂直居中的常用方法
- CSS样式的优先级
- CSS3新增的有关背景与边框的属性
- 欢迎使用CSDN-markdown编辑器
- CSS中position的4种定位详解
- CSS【2】-- CLASSES AND IDS
- 使用CSS3线性渐变(linear-gradient)实现文本波浪线效果
- CSS入门基础
- CSS左侧固定宽 右侧自适应(兼容所有浏览器)