CSS 播客 - 第 17 集:阴影
假设您收到了一个要构建的设计,其中包含一张经过剪裁并带有阴影的 T 恤图片。设计师告诉您,商品图片是动态的,可以通过内容管理系统进行更新,因此阴影也需要是动态的。图片可以是遮阳帽、短裤或任何其他商品,而不是 T 恤。如何使用 CSS 实现这一点?
CSS 具有 box-shadow
和 text-shadow
属性,但图片不是文本,因此您无法使用 text-shadow
。如果您使用 box-shadow
,阴影会出现在周围的框中,而不是在 T 恤周围。
幸运的是,还有另一种方法:drop-shadow()
过滤器。这样,您就可以完全按照设计师的要求操作。在 CSS 中,阴影有很多选项,每个选项都针对不同的用例而设计。
方框阴影
box-shadow
属性用于向 HTML 元素的框添加阴影。它适用于块元素和内嵌元素。
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
box-shadow
的值顺序如下:
- 水平偏移:正数会将其向左推,负数会将其向右推。
- 垂直偏移:正数会从上往下推送,负数会从下往上推送。
- 模糊半径:数值越大,阴影越模糊;数值越小,阴影越清晰。
- Spread radius(可选):值越大,阴影的大小越大;值越小,阴影的大小越小;如果设置为 0,则阴影的大小与blur radius 相同。
- 颜色:任何有效的颜色值。 如果未定义此属性,系统将使用计算的文字颜色。
如需将边框阴影设为内阴影(而非默认的外阴影),请在其他属性前面添加 inset
关键字。
/* Outer shadow */
.my-element {
box-shadow: 5px 5px 20px 5px #000;
}
/* Inner shadow */
.my-element {
box-shadow: inset 5px 5px 20px 5px #000;
}
多个阴影
您可以使用 box-shadow
添加任意数量的阴影。
若要实现此目的,请添加以英文逗号分隔的值集合:
.my-element {
box-shadow: 5px 5px 20px 5px darkslateblue, -5px -5px 20px 5px dodgerblue,
inset 0px 0px 10px 2px darkslategray, inset 0px 0px 20px 10px steelblue;
}
影响 box-shadow 的属性
向框中添加 border-radius
也会影响阴影的形状。这是因为 CSS 会根据盒子的形状创建阴影,就像光线照射在盒子上一样。
.my-element {
box-shadow: 0px 0px 20px 5px darkslateblue;
border-radius: 25px;
}
如果包含 box-shadow
的框位于包含 overflow: hidden
的容器中,阴影也不会超出该溢出边界。
<div class="my-parent">
<div class="my-shadow">My shadow is hidden by my parent.</div>
</div>
.my-parent,
.my-shadow {
width: 250px;
height: 250px;
}
.my-shadow {
box-shadow: 0px 0px 20px 5px darkslateblue;
}
.my-parent {
overflow: hidden;
}
文字阴影
text-shadow
属性与 box-shadow
属性非常相似。它仅适用于文本节点。
.my-element {
text-shadow: 3px 3px 3px hotpink;
}
text-shadow
的值与 box-shadow
相同,并且顺序相同。唯一的区别是,text-shadow
没有 spread
值,也没有 inset
关键字。
添加 box-shadow
后,它会剪裁为框的形状,但 text-shadow
不会剪裁。这意味着,如果文本是完全透明或半透明的,阴影会透过文本显示。
.my-element {
text-shadow: 3px 3px 3px gold;
color: rgb(0 0 0 / 70%);
}
多个阴影
您可以使用 text-shadow
添加任意数量的阴影,就像使用 box-shadow
一样。添加以逗号分隔的值集合,即可创建一些非常酷的文本效果,例如 3D 文本。
.my-element {
text-shadow: 1px 1px 0px white,
2px 2px 0px firebrick;
color: darkslategray;
}
阴影
如需实现沿着图片的任何可能曲线的阴影,请使用 CSS drop-shadow
滤镜。此阴影会应用于 Alpha 遮罩,因此非常适合为剪裁图片添加阴影,如本单元介绍部分所示。
.my-image {
filter: drop-shadow(0px 0px 10px rgba(0 0 0 / 30%))
}
drop-shadow
过滤条件的值与 box-shadow
相同,但不允许使用 inset
关键字和 spread
值。您可以向 filter
属性添加多个 drop-shadow
值实例,以添加任意数量的阴影。每个阴影都会使用上一个阴影作为定位参考点。
检查您的理解情况
测试您对阴影的了解
以下哪个阴影值是 box-shadow
独有的?
inset
inset
是一个关键字,也是 box-shadow
独有的。一个元素一次只能有 13 个阴影。