简体中文
Design token(设计令牌)
什么是 Design token?
做界面时,我们经常会遇到很多重复出现的设计决定:比如主色调选哪个蓝、按钮圆角是多大、卡片之间空开几像素、弹窗弹出来要花几毫秒。
如果把这些具体数字硬编码写死在每个组件的 CSS 里,以后只要想改个圆角或换个主题色,就得翻遍整个项目的代码挨个修改,不仅费时而且特别容易改漏。
Design token(设计令牌)就是把这些通用的设计决定统一抽出来,给它们起一个固定、清晰的名字。组件本身不写死具体数字,只引用对应的 token。以后换主题,本质上就是把这批 token 背后的具体数值整套替换掉。
在 astryx-vue 中是如何实现的?
astryx-vue 的 token 严格对齐原版 Astryx(原版在 tokens.stylex.ts 和 dataTokens.stylex.ts 中维护),名字和取值都一样。但在前端输出层面,我们并没有把它们做成 StyleX 对象,而是全部编译成了现代标准的 CSS 自定义属性(CSS 变量)。
这样设计的好处很明显:不用引入任何专门的 CSS-in-JS 编译器,只要写原生 CSS,在哪都能直接读到和修改。
- 统一的前缀规范: 每一条语义化 token 都有统一的
--astryx-前缀,避免和你项目已有的其他全局变量起冲突。这是我们和原版唯一有意不同的地方:原版的--spacing-4,在这里叫--astryx-spacing-4。前缀会一直保留,因为已经有用户的自定义主题在用这些名字。defineTheme()两种写法都认。 - 原生双模配色: 颜色相关的 token 采用标准 CSS 的
light-dark()函数书写,一条变量就同时包含了浅色和深色两套色值,不需要分开发布两份样式表,切换模式时也不需要刷掉整套样式。 - 层级覆盖规则:
- 如果 Neutral 主题覆盖了某个变量,优先使用 Neutral 的值。
- 如果 Neutral 没覆盖,则回退使用原版的默认规范值。
- 如果在自定义样式中想要微调,只需通过 CSS 层级(
@layer astryx.overrides)重新给变量赋值即可。
数值以 packages/themes/neutral/base.css 的声明为准,图表配色以 packages/themes/data.css 为准。文档中的色板与尺寸参考也是直接由这两个文件解析生成的。
Token 分类总览
你可以按照功能分类查看具体的变量名称与视觉效果:
| 类别文档 | 变量前缀与说明 |
|---|---|
| 颜色 | --astryx-color-*:包含文字、表面背景、状态提示色,以及图表用的 --astryx-color-data-* |
| 排版与字体 | --astryx-font-*、--astryx-text-*:包含字体族、字号尺寸、字重和行高梯级 |
| 动画刻度 | --astryx-duration-*、--astryx-ease-*:包含持续时间、缓动曲线与共享关键帧 |
| 间距、圆角与阴影 | --astryx-spacing-*、--astryx-size-*、--astryx-radius-*、--astryx-shadow-* 等通用尺寸标尺 |
在组件外部使用
如果你在编写自己的业务组件或页面时,也希望外观完全符合这套设计规范,直接在你的 CSS 里引用这些变量即可:
css
.my-custom-card {
/* 背景直接引用主题卡片背景色 */
background: var(--astryx-color-background-card);
/* 文字直接引用主题主要文字色 */
color: var(--astryx-color-text-primary);
/* 边框圆角直接引用元素通用圆角 */
border-radius: var(--astryx-radius-element);
/* 内边距直接引用第 4 档标尺(1rem,默认 16px,跟随根字号) */
padding: var(--astryx-spacing-4);
}更多关于 CSS 分层和覆盖层级的规则,请阅读 CSS 变量。