CSS 盒子阴影生成器
一次生成一条 box-shadow 规则:设置水平和垂直偏移、模糊、扩散、颜色以及可选的 inset,然后复制结果。真实的阴影通常需要两到三层,所以请逐层生成,再用逗号把规则连起来。
如何设计盒子阴影
-
1
设置阴影参数
水平偏移、垂直偏移、模糊半径、扩散,以及带透明度的颜色。
-
2
切换 inset
把阴影切换为 inset 即可得到内阴影,适合表现按下的按钮和凹陷效果。
-
3
选择阴影颜色
低透明度的黑色是经典之选。与元素色调相近、稍深一些的彩色阴影看起来更自然。
-
4
复制 CSS
复制单条阴影规则并粘贴到你的样式表中。要制作多层阴影,请逐层生成,再用逗号合并规则。
box-shadow 语法
box-shadow: <x-offset> <y-offset> <blur> <spread> <colour> [inset];
- x-offset:正值 = 向右,负值 = 向左。
- y-offset:正值 = 向下,负值 = 向上。
- blur:0 = 硬边缘,数值越大越柔和。可见范围大约向元素外延伸模糊值的 1.5 倍。
- spread:在元素之外额外扩展的尺寸。正值放大阴影,负值缩小阴影(适合营造细微的光晕)。
- colour:支持任意 CSS 颜色。
rgba(0, 0, 0, 0.15)是最常用的基础值。 - inset:将阴影翻转到元素内部的关键字。
多层阴影看起来更真实
这款生成器一次只输出一条阴影规则;要制作多层阴影,请逐层生成,再用逗号合并规则。
单层 0 0 40px 的阴影显得朦胧。两层阴影,靠近元素的小而锐利的一层,以及更远处大而柔和的一层,能够模拟真实光线散射的方式。
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.08),
0 4px 12px rgba(0, 0, 0, 0.08);
第一行给出紧贴元素的接触阴影,第二行给出更柔和的环境阴影。仅凭这一种组合,就能覆盖约 80% 的卡片式 UI。
高度(Elevation)层级系统
Material Design 使用 6 个高度(elevation)层级,每个层级对应一套不同的阴影组合。简化如下:
| 高度层级 | 阴影 |
|---|---|
| 1(静止) | 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.24) |
| 2 | 0 3px 6px rgba(0,0,0,.16), 0 3px 6px rgba(0,0,0,.23) |
| 3 | 0 10px 20px rgba(0,0,0,.19), 0 6px 6px rgba(0,0,0,.23) |
| 4(抬升) | 0 14px 28px rgba(0,0,0,.25), 0 10px 10px rgba(0,0,0,.22) |
| 5(悬浮) | 0 19px 38px rgba(0,0,0,.30), 0 15px 12px rgba(0,0,0,.22) |
为每种高度角色选定一套,并保持一致使用。
彩色阴影看起来更自然
纯黑阴影显得生硬,因为真实阴影会被下方表面染上色调。不妨试试:
box-shadow: 0 12px 24px rgba(40, 80, 120, 0.18);
用偏冷的蓝灰色代替纯黑。在暖色背景上,则改用更暖的色调。
性能
盒子阴影会在每次重绘时被绘制。在大量元素上使用又大又重的阴影,可能会拖慢滚动。缓解办法:
- 在元素上使用
transform: translateZ(0),强制生成合成层。 - 仅当需要阴影跟随 clip-path 时,才用
filter: drop-shadow()替换复杂阴影(通常它更慢)。 - 限制频繁重新渲染的元素上的阴影。
用于按下状态的 inset
.button:active {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.12);
}
inset 阴影能模拟凹陷的外观,按钮看起来像被压进了表面。配合一个小幅向下的 transform: translateY(1px),可以带来真实的触感点击反馈。
常见问题
通常是因为模糊太小或扩散太大。没有模糊、边缘锐利的阴影看起来就像一个重复的元素。请加大模糊(20–30px 是常见的起点),并把扩散保持在 0 或很小的负值。
box-shadow 会跟随元素的 border-box(包括 border-radius),所以圆角卡片会自动得到漂亮的圆角阴影。对于用 clip-path 裁剪出的形状,box-shadow 不会跟随裁剪;这时请改用 filter: drop-shadow()。
在选定方向上大幅偏移阴影,并用负扩散来隐藏对侧。或者使用两层阴影,一层在目标侧可见,另一层用负扩散来“吃掉“多余溢出的部分。
没有硬性上限,但每多一层阴影就多一次绘制。三到四层是实际可行的上限;再多就应该考虑改用背景图或 SVG。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
电话号码验证器
根据各国号码规划检查结构,并显示地区、类型以及E.164、国际、国内和RFC 3966格式。
随机颜色生成器
生成 1 到 50 个随机 HEX 颜色,查看色块,复制代码,并用于 CSS、测试或配色探索。
BBCode 转 HTML 转换器
将 BBCode(论坛标记)转换为干净的 HTML。支持格式标签、列表、引用、代码、图片和链接。