⭐ 觉得好用?收藏备用,下次直接打开
Card
SHADOW
在预览区拖拽以调整 X/Y 偏移
图层
参数
0px
8px
24px
0px
inset
18%
预设

CSS 阴影 是给元素增加层次和立体感的核心手段。CSS 提供三种独立的阴影机制,应对不同场景:

属性应用对象支持不支持
box-shadow矩形元素(卡片、按钮、输入框)offset / blur / spread / inset / 多层叠加跟随圆角外的轮廓
text-shadow文字字形offset / blur / 多层叠加spread / inset
filter: drop-shadow实际不透明像素(透明 PNG、SVG、镂空形状)offset / blurspread / inset

Material 多层阴影

单层阴影看起来像贴纸——真实物体的阴影由两部分组成:紧贴的硬阴影(key shadow)+ 远处的柔阴影(ambient shadow)。Material 1dp / 4dp / 8dp / 16dp / 24dp 全部由 2–3 层 box-shadow 组合而成。本工具内置 Google 官方规范值可直接复制使用,比手调”y=8 blur=24 黑 0.2”这类单层公式真实得多。

Neumorphism 拟物凹凸

用一深一浅两层 box-shadow 模拟”光从一侧打来”的物理直觉。两个前提条件:(1) 背景色不能是纯白或纯黑(推荐 #e0e5ec 这类中间灰);(2) 元素自身颜色与背景一致。这两条不满足时无论怎么调阴影都”发脏”。

性能注意

少量阴影可忽略;大 blur + 多层 + 高频动画三者组合会触发重新光栅化,长列表可能卡顿。hover 反馈优先用 transform / opacity 而非动 box-shadow——前者由合成器直接处理,几乎零成本。

📍使用场景

  • 卡片/按钮立体感用 Material 1–24dp 标准阴影一键给卡片、按钮加分级层次,避免手动调出"塑料感"假阴影。
  • Neumorphism 凹凸面用一深一浅两层阴影模拟材质从背景上凸起或凹陷,做表盘、按键、开关。
  • 文字描边/霓虹/长投影text-shadow 多层叠加:4 个 1px 偏移做描边、放大 blur 做霓虹发光、连续小偏移做长投影。
  • 透明 PNG/SVG 图标加阴影filter drop-shadow 跟随实际像素轮廓投影,box-shadow 只能投矩形,图标专用 drop-shadow。

常见问题

box-shadow / text-shadow / drop-shadow 三个看起来类似,到底什么时候用哪个?

box-shadow = 元素的"矩形外框"投影,无论内容是什么都按 border-box 投影;最常用,但透明区域不会让阴影穿过text-shadow = 仅文字字形的阴影,多层叠加可做霓虹/描边/长投影。filter: drop-shadow() = 跟随实际不透明像素投影,透明 PNG / SVG 图标用它能得到沿轮廓的真实阴影;缺点是性能比 box-shadow 略差,且不支持 inset 和 spread。规则:矩形容器 → box-shadow;文字 → text-shadow;图标/不规则形 → drop-shadow。

为什么 Material Design 的标准阴影都是多层叠加?

单层阴影看起来"假"——真实物体的阴影由两部分组成:紧贴物体的硬边小阴影(key shadow)+ 远处柔和大阴影(ambient shadow)。Material 把它们拆成 2–3 层 box-shadow 叠加:一层 y 偏移大、blur 大、alpha 低(环境光散射)+ 一层 y 偏移小、blur 小、alpha 高(直射光投影)+ 可选第三层做边缘细节。单层 8px blur 黑 0.2 看起来像贴纸;Material 8dp 三层叠加就有真实立体感。本工具的 Material 1/4/8/16/24dp 预设是 Google 官方规范值,可直接用。

inset 内阴影什么时候用?

做"凹陷"效果——输入框聚焦、表盘、卡槽、被按下的按钮、Neumorphism 凹面材质。<code>inset</code> 让阴影画在元素内侧而非外侧,视觉上元素就像往背景里"嵌"进去。常用做法:白色卡片背景 + 浅灰 inset 阴影 = 凹陷输入区。注意 inset 不影响布局(不占空间),所以用它代替 border 做"按下"效果不会引起重排。

box-shadow 的 spread(扩散)和 blur(模糊)有什么区别?

blur 只让边缘渐变变柔;spread 真的让阴影变大——正值整体外扩,负值整体内收。常见组合:(1) 柔和环境阴影:blur 大、spread 0,例如 0 8px 24px rgba(0,0,0,.15);(2) 彩色发光环:blur 中等、spread 正值、颜色饱和,例如 0 0 24px 4px rgba(108,99,255,.5);(3) focus ring 替代 outline:blur 0、spread 3、半透明主色,例如 0 0 0 3px rgba(108,99,255,.4),比浏览器默认 outline 更可控。text-shadow 和 drop-shadow 都没有 spread。

阴影会不会拖累性能?大量元素带阴影需要注意什么?

少量阴影没问题,大量 + 大 blur + 实时变化要警惕。box-shadow 由 GPU 合成,单层固定阴影(卡片、按钮)成本可忽略。但 (1) 超大 blur(>50px)+ (2) 多层叠加(5+ 层)+ (3) 高频改变(hover 动画 box-shadow)三者组合会触发重新光栅化,长列表(100+ 元素)可能卡顿。优化:把 hover 改成 transform 缩放 + opacity 变化(这两个是 GPU 友好的);或预先备好两个 shadow 用 opacity 切换(compositor 层)。drop-shadow 性能略差于 box-shadow,但仍算便宜。

Neumorphism 风格怎么调?为什么我做出来发"脏"?

核心两点:(1) 背景色不能是纯白或纯黑——需要一个有"中间灰"基调的背景(例如 #e0e5ec),这样深浅两层阴影才能同时被看到;纯白背景上浅色阴影直接消失,纯黑背景上深色阴影直接消失。(2) 元素颜色 = 背景色(或非常接近),让"凸起感"完全靠阴影来表达,而不是颜色对比;元素与背景一旦撞色就会显得"脏"或"贴片"。本工具的 Neumorphism 凸/凹预设按这个原则调好了,但需要放到合适背景上才好看——纯白/纯黑底下的 Neumorphism 视觉对比度就是不行。