CSS box-shadow 生成器,免费

通过可视化方式创建漂亮的阴影,并复制 CSS。

您的数据不会离开您的设备

预设

4px
4px
10px
0px
25%
box-shadow: 4px 4px 10px 0px rgba(0,0,0,0.25);

使用方法

  1. 拖动滑块来调整水平/垂直偏移、模糊、扩展和不透明度。
  2. 选择阴影颜色,需要时启用「inset」。
  3. 点击「添加阴影层」以叠加多重阴影。
  4. 使用预设作为快速起点。
  5. 点击「复制 CSS」将结果粘贴到您的样式表中。

常见问题

CSS 中的 box-shadow 是什么?

CSS box-shadow 属性为元素周围添加阴影效果。它接受水平偏移、垂直偏移、模糊半径、扩展半径和颜色等值。

可以添加多个阴影吗?

可以。点击「添加阴影层」来增加另一个阴影。CSS 输出中多个阴影用逗号分隔。这可用于创建复杂的叠加效果。

inset 关键字有什么作用?

添加「inset」会让阴影出现在元素内部而不是外部,形成内阴影或「凹陷」效果。

box-shadow 的五个参数

CSS box-shadow 为元素的边框盒添加一个或多个投影效果。语法为 box-shadow: <color>? <offset-x> <offset-y> <blur-radius>? <spread-radius>? inset?,多个阴影用逗号分隔。每个参数各司其职:

浏览器将阴影列表以从前到后的顺序合成:第一个阴影最靠近观察者,最后一个最远。这与 text-shadowbackground 的排序方式相同,但与大多数CSS规则的层叠方式相反,这是新手常见的困惑点。

Material Design 的双重阴影层次系统

Google的Material Design(2014年5月推出;2021年推出Material Design 3)定义了一种量化的层次系统,UI表面位于几个密度无关像素级别之一。每个级别的阴影配方使用两层叠加阴影

在Material Design 2中,层次值从0dp(无阴影)到24dp;卡片通常静止时使用1-2dp,悬停时动态变为8dp,模态对话框使用24dp。Material Design 3将层次缩减为五个命名级别(1到5),并在暗色主题中除投影外还添加了色调叠加层。本影加半影的结构仍是视觉模型,这也是为什么Tailwind的 shadow-md 由两层叠加阴影组成:0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06)

拟态风格:需要两个对向阴影的设计趋势

拟态风格(由「新」与「仿真」合成的词)在2019年底至2020年初兴起,源于乌克兰设计师Alexander Plyuto于2019年12月在Dribbble上发布的名为「Skeuomorph Mobile Banking」的帖子,数周内收获了数万个点赞。其核心配方是两个颜色与父元素背景色相同的元素上的 box-shadow:右下方是较深的阴影,左上方是较浅的阴影。深色模拟表面向光源方向后退;浅色模拟表面朝光源方向凸起的高光面。反转偏移(或对两者都添加 inset)可产生内凹/按下的外观。

诚实的无障碍警告:拟态风格因其元素与背景之间的视觉对比必然非常低(它们共享颜色)而受到广泛批评。按钮和输入框可能无法满足WCAG 1.4.11(非文本对比度,AA,3:1 UI组件对相邻颜色的比率)。按下和未按下状态通常只能通过细微的阴影方向来区分,屏幕阅读器无法传达这一信息,对低视力、色盲或屏幕眩光用户也是不可见的。仅在装饰性表面上少量使用此样式,而非用于主要控件。

box-shadow 与 filter: drop-shadow() 的对比

CSS滤镜效果定义了一个替代方案,filter: drop-shadow(<x> <y> <blur> <color>):外观视觉上相似,但有一个关键区别。box-shadow 投射的是边框盒矩形的阴影(如有 border-radius 则按其圆角)。drop-shadow 投射的是渲染元素(包括子元素)的alpha通道的阴影,包括透明PNG、带镂空的SVG形状、遮罩内容。选择 drop-shadow 最常见的原因是您要投影的元素不是矩形:透明PNG图标、SVG徽标、语音气泡三角形。

box-shadowdrop-shadow()
Spread参数
Inset变体
多重阴影是(逗号分隔列表)是(链式滤镜)
影响子元素是(整个子树)
裁剪可延伸至 overflow:hidden 边界之外限制在滤镜边界内
性能对合成器友好触发滤镜渲染通道

性能说明

box-shadow是渲染成本较高的CSS属性之一。成本有三个来源:模糊核大小(高斯模糊是可分离的两次卷积;模糊值翻倍,每像素工作量翻四倍,因此大卡片上100像素的模糊在滚动时会明显降低帧率)、阴影表面积(由spread扩展后再由模糊进一步放大的矩形是GPU需要光栅化的区域,大型模态叠加阴影是最耗性能的类型),以及重绘(对 box-shadow 进行动画处理会在每一帧触发阴影区域的重绘)。

实用建议:

无障碍性

从无障碍树的角度来看,阴影属于装饰性内容(屏幕阅读器会忽略它们),但它们有一定影响:

快速配方

效果CSS
细腻卡片悬浮0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)
柔和现代卡片0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06)
重型模态浮起0 25px 50px -12px rgba(0,0,0,0.25)
锐利1px印章0 0 0 1px rgba(0,0,0,0.05)
焦点环(3px)0 0 0 3px rgba(59,130,246,0.5)
内凹输入框「井」效果inset 0 2px 4px 0 rgba(0,0,0,0.06)
光晕发光0 0 20px 4px rgba(99,102,241,0.6)

更多问题

为什么我的阴影被裁剪了?

几乎总是因为某个祖先元素设置了 overflow: hidden。阴影延伸到边框盒之外,但在祖先元素的边缘处被裁剪。两种解决方案:将阴影移到祖先元素本身,或使用不带overflow裁剪的包裹元素。filter: drop-shadow() 没有这个问题,但有自己的取舍。

我是否还需要使用 -webkit-box-shadow 之类的厂商前缀?

不需要。无前缀的 box-shadow 自2012年前后已获得全面支持。在2026年的代码中,厂商前缀是纯粹的噪音,应当去除。2010年代初期的CSS重置库通常防御性地包含了这些前缀;现代代码可以安全地删除它们。

如何对文字而非盒子应用阴影?

使用 text-shadow,它与box-shadow具有相同的偏移/模糊/颜色语法,但没有spread或inset。对于样式化文字上的字形形状阴影(例如 background-clip: text 渐变文字),对父元素使用 filter: drop-shadow() 才是正确的工具,box-shadow 会在字形后方投射矩形阴影。

为什么我的 0 0 0 2px 阴影看起来不柔和?

因为第三个值(模糊半径)是 0。没有模糊的纯spread阴影会产生锐利的实线轮廓,这正是焦点环和「伪轮廓」技巧所需要的,但不适合柔和的层次感。请添加一些模糊:0 0 4px 0 rgba(0,0,0,0.2)

有任何内容会发送至服务器吗?

不会。预览在您拖动滑块时在浏览器中实时重新渲染;CSS字符串在本地生成;复制操作写入您的剪贴板。页面加载后即可离线使用。

相关工具

CSS 渐变生成器,免费 免费在线配色生成器 CSS 压缩器,免费