css阴影之Photoshop投影与box-shadow转换

box-shadow

box-shadow属性用于在元素上添加阴影效果。同一个元素上可以设置多个阴影效果,使用逗号将它们分开即可。该属性可设置的值包括x轴偏移量(x-offset),y轴偏移量(y-offset),模糊半径(blur-radius),扩散半径(spread-radius),颜色(color)。

若元素设置了border-radius属性,阴影同样会有圆角效果。多个阴影在z轴上的顺序和text-shadows规则相同,即第一个阴影在最上面。

box-shadow属性值设置规则

  • 二至四个值时

    • 二个值时,被视为offset-x与offset-y

    • 三个值时,第三个值为blur-radius

    • 四个值时,第四个值为spread-radius

  • inset 可选值,表示阴影向内

  • color 可选值,指代阴影颜色

取值

inset 未指定inset时阴影默认向外扩散,使用inset关键字使阴影落在盒子内部,看起来像是内容被压低了,此时阴影在边框之内,背景之上,内容之下。

offset 两个offset为length类型值。用来设置阴影偏移量。offset-x 设置阴影水平偏移,正值阴影位于元素右边,负值阴影位于元素左边。offset-y 设置阴影垂直偏移,正值阴影位于元素下方,负值阴影位于元素上方。

blur-radius 必需为正值,设置阴影模糊面积,越大阴影颜色越淡。默认为0,阴影边缘锐利。

spread-radius 默认为0,阴影与元素同样大小。取正值时,阴影扩大,取负值时,阴影收缩。需要考虑inset属性的影响。

color 未指定时由浏览器决定,通常为color的值,safari中为透明。

Photoshop投影与css阴影的换算

结构:

  • 混合模式:Photoshop提供了各种混合模式,css仅支持正常模式

  • 不透明度:相当于box-shadow中color的rgba中的a值

  • 角度:投影的角度

  • 距离:阴影的距离,根据角度和距离可以换算出css3中的offset-x与offset-y

    • offset-x:距离 * cos(180度 - 角度)

    • offset-y:距离 * sin(180度 - 角度)

  • 扩散:阴影的扩散,根据扩散与大小可以计算出spread-radius与blur-radius

  • 大小:阴影的大小

    • spread-radius:扩散 * 大小

    • blur-radius: 大小 - 扩散 * 大小

text-shadow因为没有spread-radius所以不能完全实现Photoshop中的效果。