html元素加阴影唯一可靠方案是css的box-shadow属性,它支持多层、内阴影及自定义属性管理,不存在token_html或shadow token等html标准属性。

HTML 元素加阴影不能靠 Token_html 或 Shadow Token
不存在叫 Token_html 或 Shadow Token 的 HTML 标准属性、全局变量或内置 API。这是混淆了设计系统术语和前端实现方式的结果——所谓“阴影 Token”只是设计团队内部对阴影值的命名约定(比如 shadow-sm、shadow-lg),不是 HTML 语法的一部分。
CSS box-shadow 是唯一可靠方案
所有浏览器渲染 HTML 元素阴影,都依赖 CSS 的 box-shadow 属性。它接受 4–6 个参数:水平偏移、垂直偏移、模糊半径、扩散半径、颜色、可选的 inset 关键字。
- 常见写法:
box-shadow: 0 2px 4px rgba(0,0,0,0.1) - 多层阴影用逗号分隔:
box-shadow: 0 1px 2px #000, 0 2px 8px rgba(0,0,0,0.15) - 内阴影加
inset:box-shadow: inset 0 2px 4px rgba(0,0,0,0.05) - 响应式慎用固定像素值;模糊半径过大会显著影响重绘性能
如何模拟“Shadow Token”系统
所谓“系统方法”,本质是用 CSS 自定义属性(CSS Custom Properties)统一管理阴影值,再在组件中引用。这不是 HTML 功能,而是工程组织手段。
- 在
:root中定义::root {<br> --shadow-sm: 0 1px 2px rgba(0,0,0,0.05);<br> --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1);<br> --shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1);<br>} - 组件中使用:
box-shadow: var(--shadow-md); - 避免把阴影值硬编码进 HTML 的
style属性里——无法复用、不可维护 - 不要用 JS 动态拼接
box-shadow字符串来“注入 Token”,既无必要又难调试
容易被忽略的兼容性与陷阱
box-shadow 在所有现代浏览器中支持良好,但几个细节常被忽略:
-
inset阴影不适用于img或video等替换元素(除非包裹一层div) - 透明度用
rgba()或hsla(),别用opacity——后者会把整个元素变透明 - 某些旧版 Safari 对负扩散半径(第 4 个参数)支持不稳定,建议设为 0 或省略
- 阴影不会触发
scroll事件,也不参与元素尺寸计算(getBoundingClientRect()不包含阴影区域)
真正要落地“阴影系统”,核心是 CSS 自定义属性 + 设计规范文档 + 组件库约束,而不是找一个叫 Shadow Token 的 HTML 标签或函数。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











