box-shadow颜色透明度必须用rgba()或hsla()函数,如rgba(0,0,0,0.2),禁用#0004(Firefox不识别)和transparent(解析为全透明无阴影);blur-radius控制模糊程度,alpha仅调节整体强度。
box-shadow 里颜色带透明度,必须用 rgba() 或 hsla(),别写 #0004 或 transparent——后者不生效,前者在 Firefox 里直接失效。
直接写 rgba(0, 0, 0, 0.2) 或 hsla(0, 0%, 0%, 0.2) 就行。关键点有三个:
#0004 是 Chrome/Edge 实验性语法,Firefox 完全不识别,线上阴影会消失transparent 不等于 “带透明度的黑色”,它会被解析为 rgba(0,0,0,0),结果就是没阴影模糊靠 blur-radius 值本身控制,不是靠调低 alpha。常见误解是“透明度越低越模糊”,其实:
box-shadow: 0 0 1px rgba(0,0,0,0.9) 是一圈硬边浓影box-shadow: 0 0 20px rgba(0,0,0,0.1) 才是真正柔和的大片晕染blur-radius,再适当降低 alpha(比如从 0.3 降到 0.12)blur-radius 为 0 时,再低的 alpha 也是硬边,没有过渡多个 box-shadow 是逐层绘制,不是简单相加。视觉上更接近乘法叠加:
立即学习“前端免费学习笔记(深入)”;
rgba(0,0,0,0.2) 叠在一起,实际效果接近 0.2 × 0.2 = 0.04,显得过淡0.3–0.4,而不是照搬第一层0 2px 6px rgba(0,0,0,0.2), 0 8px 24px rgba(0,0,0,0.08)
rgba(0,0,0,0.1) 在白色背景上可见,在黑色背景上几乎不可见——这不是 bug,是对比度崩了。
@media (prefers-color-scheme: dark) 覆盖颜色,比如改成 rgba(255,255,255,0.08)
#ccc)做阴影色,它在深色模式下可能比背景还亮最常被忽略的其实是渲染层级:给元素加了 transform 或 backdrop-filter 后,阴影可能被裁剪或发虚,这时候得检查是否意外触发了层叠上下文。