盒子阴影 box-shadow
盒子阴影
CSS box-shadow 属性用于在元素的框架上添加阴影效果。你可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开。该属性可设置的值包括阴影的 X 轴偏移量、Y 轴偏移量、模糊半径、扩散半径和颜色。
box-shadow 属性可以设置一个或者多个阴影
- 每个阴影用
<shadow>表示 - 多个阴影之间用逗号
,隔开,从前到后叠加
- 每个阴影用
<shadow>的常见格式:<shadow> = <color>? && [<length>{2} <length [0,∞]>? <length>?] && inset?- 第 1 个
<length>:horizontal offset, offset-x, 水平方向的偏移,正数往右偏移 - 第 2 个
<length>:vertical offset, offset-y, 垂直方向的偏移,正数往下偏移 - 第 3 个
<length [0,∞]>:blur-radius, 模糊半径 - 第 4 个
<length>:vertical offset, 延伸/扩散半径 <color>:阴影的颜色,如果没有设置,就跟随 color 属性的颜色inset:外框阴影变成内框阴影
- 第 1 个
我们可以通过一个网站测试盒子的阴影:Box Shadow CSS Generator | 𝗧𝗛𝗘 𝗕𝗘𝗦𝗧 𝗢𝗡𝗟𝗜𝗡𝗘 𝗖𝗦𝗦 𝗚𝗘𝗡𝗘𝗥𝗔𝗧𝗢𝗥
你几乎可以在任何元素上使用box-shadow来添加阴影效果。如果元素同时设置了 border-radius属性,那么阴影也会有圆角效果。多个阴影在 z 轴上的顺序和多个 text shadows 规则相同 (第一个阴影在最上面)。
Box-shadow generator 是一个允许你生成 box-shadow 的交互式工具。
/* x 偏移量 | y 偏移量 | 阴影颜色 */
box-shadow: 60px -16px teal;
/* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影颜色 */
box-shadow: 10px 5px 5px black;
/* x 偏移量 | y 偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影颜色 */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);
/* 插页 (阴影向内) | x 偏移量 | y 偏移量 | 阴影颜色 */
box-shadow: inset 5em 1em gold;
/* 任意数量的阴影,以逗号分隔 */
box-shadow: 3px 3px red, -1em 0 0.4em olive;
/* 全局关键字 */
box-shadow: inherit;
box-shadow: initial;
box-shadow: unset;
取值
inset: 如果没有指定inset,默认阴影在边框外,即阴影向外扩散。 使用inset关键字会使得阴影落在盒子内部,这样看起来就像是内容被压低了。此时阴影会在边框之内 (即使是透明边框)、背景之上、内容之下。<offset-x><offset-y>: 这是头两个<length>值,用来设置阴影偏移量。x,y 是按照数学二维坐标系来计算的,只不过 y 垂直方向向下。<offset-x>设置水平偏移量,正值阴影则位于元素右边,负值阴影则位于元素左边。<offset-y>设置垂直偏移量,正值阴影则位于元素下方,负值阴影则位于元素上方。可用单位请查看<length>。 如果两者都是 0,那么阴影位于元素后面。这时如果设置了<blur-radius>或<spread-radius>则有模糊效果。需要考虑inset<blur-radius>: 这是第三个<length>值。值越大,模糊面积越大,阴影就越大越淡。不能为负值。默认为 0,此时阴影边缘锐利。本规范不包括如何计算模糊半径的精确算法,但是,它详细说明如下:对于长而直的阴影边缘,它会创建一个过渡颜色用于模糊 以阴影边缘为中心、模糊半径为半径的局域,过渡颜色的范围在完整的阴影颜色到它最外面的终点的透明之间。 (译者注:对此有兴趣的可以了解下数字图像处理的模糊算法。)
<spread-radius>: 这是第四个<length>值。取正值时,阴影扩大;取负值时,阴影收缩。默认为 0,此时阴影与元素同样大。需要考虑inset<color>: 相关事项查看<color>。如果没有指定,则由浏览器决定——通常是color的值,不过目前 Safari 取透明。
列表中的每个阴影通过color组件(作为颜色),以及 x,y,blur,(合适的时候)加上 spread 组件(作为长度)进行合成。对于每个阴影,如果两个输入的阴影都是 inset 或者都不是 inset,那么要添加的阴影必须考虑已存在的阴影。如果任何一对输入阴影中,一个是 inset,另一个不是 inset,那么整个阴影列表就是不可合成的。如果阴影列表有不同的长度,那么较短的列表会在尾部补上这类阴影:颜色透明,所有长度为 0,inset 还是非 inset 同较长的列表。
语法
box-shadow =
none |
<shadow>#
<shadow> =
<color>? &&
[ <length>{2} <length [0,∞]>? <length>? ] &&
inset?
规范

示例
Loading Github Gist ...
Loading Github Gist ...
Loading Github Gist ...
/* 内置的阴影 -3em 向上 3em 模糊半径 inset 向内扩散 */
box-shadow: inset 0 -3em 3em #ff85ff;
/* 2 个像素宽度的 border 式的阴影(可以用 outline 来替代) */
box-shadow: 0 0 0 2em #ff85ff;
/* 常规的下沉阴影 0.3em 向右 0.3em 向下 2em 模糊半径 2em 扩散半径 */
box-shadow: 0.3em 0.3em 2em 2em #ff85ff;