CSS长方体阴影生成器

按 box-shadow 四值语法 offset-x offset-y blur spread color 实时生成声明,内凹(inset)、负 spread 收缩、多层阴影与八位十六进制色值一并给出。

默认示例:blur 18px 的可见外扩半径是 blur/2 + spread = 9 + 0 = 9px;换任意数值后预览与声明同步更新。

box-shadow: 6px 8px 18px 0px rgba(31,41,55,0.18);
/* 等价八位十六进制:#1F29372E */
常用阴影预设对照表(默认显示 12 行,「加载更多」追加 6 行;rgba 值后括号内为等价 8 位 hex)
名称CSS 声明
经典卡片0 2px 8px 0 rgba(23,32,51,0.15) #17203326
悬浮抬起0 12px 28px 0 rgba(23,32,51,0.2) #17203333
贴边薄影0 1px 3px 0 rgba(23,32,51,0.1) #1720331A
内凹输入框inset 0 2px 6px 0 rgba(23,32,51,0.25) #17203340
焦点描边环0 0 0 3px rgba(49,95,232,0.35) #315FE859
双层卡片0 1px 2px 0 rgba(23,32,51,0.3), 0 4px 12px 0 rgba(23,32,51,0.15) #1720334D / #17203326
下拉菜单0 6px 16px 0 rgba(23,32,51,0.12), 0 2px 4px 0 rgba(23,32,51,0.08) #1720331F / #17203314
硬投影4px 4px 0 0 #172033
贴底收敛0 10px 20px -8px rgba(23,32,51,0.4) #17203366
全向光晕0 0 24px 4px rgba(49,95,232,0.5) #315FE880
顶部内高光inset 0 1px 0 0 rgba(255,255,255,0.6) #FFFFFF99
厚重长投影12px 12px 0 0 rgba(23,32,51,0.2) #17203333

使用方法

CSS长方体阴影生成器的输出只有一条 box-shadow 声明,但四个长度值与颜色各有明确语义,按下面的步骤填:

  1. 填四个长度值:offset-x(示例 6px,正数向右偏)、offset-y(示例 8px,正数向下偏)、blur(示例 18px)、spread(示例 0px)。
  2. 用颜色选择器挑阴影色(示例 #1f2937),再用 alpha 滑出透明度(示例 0.18);需要内凹就勾 inset。
  3. 点「生成阴影」或在任意输入框按 Enter,预览框与声明同步更新,声明下方附等价的八位十六进制色值。
  4. 「复制 CSS」把声明复制到剪贴板,直接粘进样式表。
  5. 「载入四层示例」演示多阴影逗号层叠的写法;下方 18 行预设表可用「导出预设表 CSV」整表带走。

这个CSS长方体阴影生成器能解决什么

box-shadow 语法短、坑多:值都能省略,省略后含义悄悄改变。本页把每个值都做成显式控件,输出永远是完整的四值语法加颜色,杜绝「少写一个 0px 导致 spread 被当成了 color」这类手写错误。

第二类问题是阴影看起来不对劲却说不清为什么。常见原因是 blur 与 spread 的关系没对齐:blur 18px 的可见外扩半径其实是 18/2 + spread = 9px,而不是 18px。统计条实时显示这个中间量,调参时心里有数。

第三类是透明色写法不统一:设计稿给的是 rgba,项目里却统一用八位 hex。本页对任意 alpha 都换算出等价的 #RRGGBBAA,并说明换算的四舍五入口径(alpha×255 取整)。

本页不做的事:不生成 text-shadow(按字形轮廓渲染,参数语义不同);不调 filter: drop-shadow(无 spread 参数,差异见原理一节);不做带角度的太阳光投影模拟——box-shadow 没有「角度」参数,方向全靠 offset 的正负表达。

原理与规则说明

语法遵循 CSS Backgrounds and Borders Module Level 3:box-shadow: offset-x offset-y blur spread color,inset 关键字可写在最前。前两个值必填,后三个可省略;颜色省略时用 currentColor——这正是手写时最意外的隐式行为,本页输出永远显式带色。

blur 的语义不是「模糊半径到边」,规范把它定义为高斯模糊标准差的 2 倍:blur 18px 即 σ=9px,所以可见外扩半径是 blur/2 + spread。spread 则直接给阴影「实体」加宽或收窄:负 spread 收缩阴影,spread = −blur/2 时可见外扩恰好归零,只剩弥散;贴底收敛预设(0 10px 20px −8px)就是用 −8 抵掉 20/2=10 的扩散再收 3px,让阴影贴着盒子下缘。

负值边界:spread 允许负;blur 不允许负,规范要求按 0 处理,本页输入负 blur 时按 0 参与计算并在统计条标注,而不是静默吞掉。多层阴影用逗号分隔,先声明的在上层:上层不透明时会完全盖住下层,半透明时下层透出叠加。

颜色换算:rgba(r,g,b,a) 与 #RRGGBBAA 等价(CSS Color 4),alpha 先乘 255 再四舍五入,量化步长 1/255 ≈ 0.392%,共 256 档。示例 alpha 0.18 → 0.18×255 = 45.9 → 46 → 十六进制 2E,得 #1F29372E;顺带说明 0.18 与 0.179 落在同一档,八位 hex 本身就有量化损失。

与 filter: drop-shadow() 的分工:box-shadow 按边框盒矩形渲染,元素背景透明也照样是一整块矩形阴影;drop-shadow 按alpha 轮廓渲染,圆形元素得圆形阴影、PNG 贴纸得贴纸形阴影,但它只有 offset-x offset-y blur color 四个值,没有 spread——需要负 spread 收缩的内阴影效果只能用 inset 的 box-shadow 表达。

完整示例(数值仅作演示)

CSS长方体阴影生成器的默认单层示例:6px 8px 18px 0px rgba(31,41,55,0.18)。拆开读:向右偏 6px、向下偏 8px(光源在左上);blur 18 → σ=9,可见外扩 9+0=9px;颜色 #1f2937 即 rgb(31,41,55),alpha 0.18 对应八位 hex #1F29372E。这组数与控件默认值、输出区、预览框三处一致。

四层示例(预览可直接载入):0 1px 2px 0 rgba(23,32,51,0.08)、0 4px 8px −2px rgba(23,32,51,0.1)、0 12px 28px −6px rgba(23,32,51,0.16)、0 24px 56px −12px rgba(23,32,51,0.2)。四层的可见外扩半径分别是 1px、2px、8px、16px,由近到远逐层铺开、alpha 逐层加深——这是「柔和堆叠」的标准写法,比单层大 blur 更接近真实光照。

对照示例:同一元素把 box-shadow 换成 filter: drop-shadow(0 12px 28px rgba(23,32,51,0.2)),矩形盒子上两者几乎一致;但如果盒子是圆形(border-radius 50%),box-shadow 仍是按矩形盒的圆角矩形算(跟随圆角),而 drop-shadow 没差别;真正的分野在透明内容——贴图元素上 box-shadow 框住整个矩形,drop-shadow 只描 alpha 轮廓。

输入范围与对照表

字段允许范围步进默认边界含义
offset-x / offset-y−400~400 px16 / 8超出视口级的偏移没有设计意义
blur−100~400 px118负值按规范以 0 参与计算并提示
spread−200~400 px10负值收缩;−blur/2 时可见外扩归零
alpha0~10.010.180 完全透明仍占位;量化 256 档

预设对照表 18 行在工具区,每行给出名称与完整声明,rgba 写法附等价八位 hex;硬投影与厚重长投影两行是纯 hex(不透明,无 alpha 通道)。

输入范围、边界与精度说明

输出精度约定:长度按输入原值输出(整数 px),不引入小数;alpha 换算八位 hex 时按 alpha×255 四舍五入,这一步不可逆——反查时 #2E 只能还原出 0.18 附近的一个区间,不要拿八位 hex 反推「精确」透明度。

层叠顺序边界:多阴影先声明的在上层。想让「远层」透出来,必须把不透明的近层写在后面或控制 alpha;同位置同 alpha 的两层叠加不会变两倍深(下层被上层覆盖渲染,非乘法混合)。

性能边界:阴影层数控制 在 1~6 层。每层都要独立做一次高斯模糊与合成,层数与面积是渲染开销的两个乘数;低端机上大面积多层阴影滚动时会掉帧。blur=0 是硬边(无过渡),1px 起才有可见羽化;0.5px 允许但等于半像素羽化,不同设备渲染差异明显。

常见误用的正确解释:一,阴影没出现——多半 alpha 是 0 或颜色与背景同色,本页会照常输出声明并在统计条提示 alpha 0 不可见;二,inset 阴影「位置反了」——inset 的 offset 正负号语义与外阴影一致,但阴影画在内侧,视觉方向感受相反;三,负 blur 被某些工具静默清零,本页显式标注。层数、偏移超出范围的输入会得到具体到字段与上下限的报错。

常见问题

为什么 blur 18px 的阴影看起来只有 9px?

规范定义 blur 是高斯标准差的 2 倍,可见外扩半径 = blur/2 + spread = 9 + 0 = 9px。要更宽的柔影,把 blur 翻倍或加正 spread。

inset 能和普通阴影同时用吗?

可以。inset 是每层自己的属性,逗号列表里有的层写 inset、有的不写即可,例如「inset 0 1px 0 0 rgba(255,255,255,0.6), 0 2px 8px 0 rgba(23,32,51,0.15)」一内一外。

多层阴影谁在上谁在下?

先声明的在上层。上层不透明时下层完全不可见;半透明时下层从上层透出。调试时可先把各层 alpha 临时设为 1 观察顺序。

八位 hex 老浏览器不认怎么办?

#RRGGBBAA 是 CSS Color 4 写法,IE 与旧版 Edge 不支持。用本页主输出的 rgba() 写法兼容性最好,八位 hex 仅作等价参考。

阴影会影响布局或点击区域吗?

不会。box-shadow 不占布局空间、不参与命中测试,点击穿透到阴影下方的元素;需要「占位的外扩」请用 border 或 outline。

为什么我的阴影盖住了相邻元素?

阴影属于元素本身的绘制层,后绘制的元素若在前面元素的层级之上,阴影会随宿主被压在下层;用 z-index 调整宿主层级即可,阴影无法单独调层级。

alpha 0.18 换算成 hex 为什么是 2E?

0.18×255 = 45.9,四舍五入 46,十六进制 2E。整条链路是「alpha → 0~255 整数 → 两位十六进制」,量化步长 1/255,约 0.392%。

调参时预览不更新?

检查 alpha 与长度字段是否为空或超出 min/max:非法输入会给出指出字段与范围的红色提示而不是静默归零;修正后点「生成阴影」即可。

相关工具

全部生成器见分类页。