揭秘CSS实用技巧总结( 二 )


揭秘CSS实用技巧总结

文章插图
 
【揭秘CSS实用技巧总结】投影模拟多重边框
单侧投影
  • 关键实现:box-shadow
  • 具体分析:box-shadow 前两个参数指定阴影的x、y偏移量,注意若为正数时整体向右/向下偏移,那么相应的左方/上方会空出一部分来(可以用来隐藏模糊半径或扩张半径),负数相反;第三个参数是阴影模糊半径,即高斯模糊多增加出来的过度颜色;第四个参数是阴影扩张半径,表示阴影增加的尺寸,可以是负数,表示阴影缩短的尺寸:地址
  box-shadow: 0 5px 4px -4px black;第二个参数使阴影整体下移 5px,第三个参数使阴影四周多了 4px 的高斯模糊(注意由于整体下移了 5px,所以此时上方还是没有阴影露出的),第四个参数又把阴影整体缩小了 4px,,所以左右两边才没有出现模糊半径导致的高斯模糊阴影色,从而实现单侧投影 。
揭秘CSS实用技巧总结

文章插图
 
单侧投影
还可以逗号分隔设置多个阴影色,比如下面的两侧投影效果:地址
  box-shadow: 5px 0 5px -5px black,             -5px 0 5px -5px black;
揭秘CSS实用技巧总结

文章插图
 
单侧投影
不规则投影
  • 关键实现:filter: drop-shadow()
  • 具体分析:box-shadow 不能透过透明背景显示出来,不能越过伪元素/子元素显示出来,而这些drop-shadow能做到 。(但无论哪种投影都会被clip-path剪裁掉~~)地址
  filter: drop-shadow(2px 2px 10px rgba(0,0,0,.5));
揭秘CSS实用技巧总结

文章插图
 
不规则投影
滤镜的染色和褪色效果前端开发大都了解糊滤的高斯模镜效果是filter: blur()实现的,但是却很少使用滤镜的其他几个调色效果 。filter 的值有blur()、drop-shadow()、url()、brightness()、contrast()、grayscale()、hue-rotate()、invert()、opacity()、saturate()、sepia()~~可以使用复合形式如:filter: sepia(1) saturate(4)等 。下面是filter属性值大集合:地址
揭秘CSS实用技巧总结

文章插图
 
滤镜的染色和褪色效果
饼图 svg饼图的 css 实现方案非常奇怪,所以我忽略之 。推荐使用 svg 的实现方案,非常简单,先来个基本教学吧~
先画个圆:
<svg width="100" height="100">  <circle r="25" cx="50" cy="50" /></svg>这里 r="25" 是半径25,cx cy 分别表示圆心的 x y 坐标 。
circle {  fill: yellowgreen;  stroke: #666;  stroke-width: 50;}这里给圆形定义了一个宽度 40 的描边:
揭秘CSS实用技巧总结

文章插图
 
饼图 svg
再把描边设为线段长度 20 间隔 10 的虚线:
circle {    ...    stroke-dasharray: 20 10;}当把虚线的间隔设定为大于等于圆周时,虚线的线段长度就是一个扇形区域(当线段长度等于圆周时扇区达到100%):
揭秘CSS实用技巧总结

文章插图
 
给 svg 设置圆角和背景色,并旋转 -90deg,就可以实现一个饼图:地址(使用currentColor关键字和color: inherit 是为了实现DRY原则 。)
揭秘CSS实用技巧总结

文章插图
 
但是这样的饼图其扇区大小是不易计算的,为了方便计算,可以让虚线的线段长度同时也是圆周无限接近100,这样就可以更方便的设置扇区的百分比 。圆周是 2πr,所以 100 = 2πr,计算得出半径 r 近似值 16 。再利用 svg 的 viewBox 属性,实现自适应容器大小的饼图:地址
揭秘CSS实用技巧总结

文章插图
 
这种方法有个弊端,就是当设置 stroke-dasharray: 100 100 时会有一条缝,这是取近似值无法避免的 。
背景backgroundbackground 是我们最常用的属性之一,但作为一个老前端,我也只能羞耻的说我目前并没有完全掌握这个属性 。


推荐阅读