box-shadow - CSS(层叠样式表) 编辑
CSS box-shadow
属性用于在元素的框架上添加阴影效果。你可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开。该属性可设置的值包括阴影的X轴偏移量、Y轴偏移量、模糊半径、扩散半径和颜色。
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
你几乎可以在任何元素上使用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;
向元素添加单个 box-shadow 效果时使用以下规则:
- 当给出两个、三个或四个
<length>
值时。- 如果只给出两个值, 那么这两个值将会被当作
<offset-x><offset-y>
来解释。 - 如果给出了第三个值, 那么第三个值将会被当作
<blur-radius>
解释。 - 如果给出了第四个值, 那么第四个值将会被当作
<spread-radius>
来解释。
- 如果只给出两个值, 那么这两个值将会被当作
- 可选,
inset
关键字。 - 可选,
<color>
值。
若要对同一个元素添加多个阴影效果,请使用逗号将每个阴影规则分隔开。
取值
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取透明。
合成
将none看做是长度为0的列表。
列表中的每个阴影通过color
组件(作为颜色),以及 x,y,blur,(合适的时候)加上spread组件(作为长度)进行合成。对于每个阴影,如果两个输入的阴影都是inset或者都不是inset,那么要添加的阴影必须考虑已存在的阴影。如果任何一对输入阴影中,一个是inset,另一个不是inset,那么整个阴影列表就是不可合成的。如果阴影列表有不同的长度,那么较短的列表会在尾部补上这类阴影:颜色透明,所有长度为0,inset还是非inset同较长的列表。
正规文法
none | <shadow>#where
<shadow> = inset? && <length>{2,4} && <color>?
where
<color> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>
where
<rgb()> = rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) | rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )
<rgba()> = rgba( <percentage>{3} [ / <alpha-value> ]? ) | rgba( <number>{3} [ / <alpha-value> ]? ) | rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>? )
<hsl()> = hsl( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsl( <hue>, <percentage>, <percentage>, <alpha-value>? )
<hsla()> = hsla( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsla( <hue>, <percentage>, <percentage>, <alpha-value>? )where
<alpha-value> = <number> | <percentage>
<hue> = <number> | <angle>
此处应翻译为“正规文法”或“正则文法”。对此有兴趣的可以了解下 编译原理 的 “正规文法”
例子
第一个例子中,包括了三种shadows,内置的阴影, 常规的下沉阴影, 和一个2个像素宽度的border式的阴影 (可以用 outline
来替代第三种)。
HTML
<blockquote><q>You may shoot me with your words,<br/>
You may cut me with your eyes,<br/>
You may kill me with your hatefulness,<br/>
But still, like air, I'll rise.</q>
<p>— Maya Angelou</p>
</blockquote>
CSS
blockquote {
padding: 20px;
box-shadow:
inset 0 -3em 3em rgba(0,0,0,0.1),
0 0 0 2px rgb(255,255,255),
0.3em 0.3em 1em rgba(0,0,0,0.3);
}
HTML
<div><p>Hello World</p></div>
CSS
p {
box-shadow: 0 0 0 2em #F4AAB9,
0 0 0 4em #66CCFF;
margin: 4em;
padding:1em;
}
当 x-offset
, y-offset
, 和 blur
都是0, 盒阴影将是一个四边都是一样长度的带有颜色的outline
. 当设置了多个阴影时,阴影绘制由最后一个开始, 故第一个设置的阴影将覆盖在后设置的阴影之上. 当border-radius设置为0时(也是其默认值)
, 阴影的四角将没有弧度. 当我们设置了border-radius
为其他不为0的值时,阴影的四角也随之形成弧度。
我们通常在元素上增加一个大小为最大阴影宽度的margin
值以保证阴影不会覆盖到相邻的元素或者覆盖到元素的border
上. box-shadow
属性不会影响到盒模型的构成。
规范
规范 | 状态 | 注 |
---|---|---|
CSS Backgrounds and Borders Module Level 3 box-shadow | Candidate Recommendation | 初次定义 |
初始值 | none |
---|---|
适用元素 | all elements. It also applies to ::first-letter . |
是否是继承属性 | 否 |
计算值 | any length made absolute; any specified color computed; otherwise as specified |
Animation type | a shadow list |
浏览器兼容性
BCD tables only load in the browser
此页面上的兼容性表由结构化数据生成。 如果您想为数据做出贡献,请查看https://github.com/mdn/browser-compat-data并向我们发送拉取请求。参见
-
<color>
数据类型 - 其他与color相关的属性:
color
,background-color
,border-color
,outline-color
,text-decoration-color
,text-emphasis-color
,caret-color
, andcolumn-rule-color
- 使用 CSS 给 HTML 元素添加颜色
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论