Design Tokens
结构化的设计决策,AI 可读可消费
Design Tokens 是设计系统中最小的设计决策单元,定义了颜色、间距、字体、动效等基础样式。所有 Token 都以结构化的 JSON Schema 形式定义,确保设计规范的一致性,同时让 AI 工具可以直接读取和使用。
为什么需要 Design Tokens?
一致性保证
所有设计师和开发使用相同的值,避免"差不多"的颜色和间距。
快速迭代
修改一个 Token,所有引用的地方自动更新,无需逐个查找替换。
AI 可读
结构化定义让 AI 工具(如 Cursor、Claude)可以直接引用,生成符合规范的代码。
颜色 Tokens
针对 10-Foot UI 优化的颜色系统,确保 3 米观看距离下的清晰对比度。
主色系统
--color-primary
#0066ff
主要品牌色,用于按钮、链接、焦点状态
--color-primary-hover
#0052cc
主色的 hover 状态
--color-primary-light
#e6f0ff
主色的浅色版本,用于背景
语义色系统
--color-success
#10b981
成功状态提示
--color-warning
#f59e0b
警告状态提示
--color-error
#ef4444
错误状态提示
文本颜色
--text-primary
light: #1a1a1a | dark: #ffffff
主要文本,标题和重要信息
--text-secondary
light: #6c757d | dark: #b0b0b0
次要文本,描述和辅助信息
--text-tertiary
light: #adb5bd | dark: #808080
最弱文本,placeholder 和禁用状态
间距 Tokens
基于 8px 网格系统,针对 10-Foot UI 放大 1.5 倍。
| Token 名称 | 值 | 使用场景 |
|---|---|---|
--spacing-xs |
8px | 图标与文本间距、标签内边距 |
--spacing-sm |
12px | 按钮内边距、小卡片间距 |
--spacing-md |
16px | 默认组件内边距、列表项间距 |
--spacing-lg |
24px | 卡片内边距、区块间距 |
--spacing-xl |
32px | 大区块间距、页面边距 |
--spacing-2xl |
48px | 章节间距、主要内容区间距 |
--spacing-3xl |
64px | 页面级别的大间距 |
设计原则
- 限制选择:只使用预定义的 7 档间距,避免随意值(如 18px、22px)
- 8px 网格:所有间距都是 8 的倍数,确保对齐和视觉节奏
- 10-Foot 优化:相比桌面端放大 1.5 倍,确保远距离可识别
字体 Tokens
10-Foot UI 专用字体规范,所有字号相比桌面端放大 1.5-2 倍。
| Token 名称 | 字号 / 行高 | 字重 | 使用场景 |
|---|---|---|---|
--font-display |
72px / 1.2 | 700 | 超大标题、欢迎页 |
--font-h1 |
48px / 1.3 | 600 | 页面标题 |
--font-h2 |
36px / 1.4 | 600 | 区块标题 |
--font-h3 |
28px / 1.4 | 500 | 小节标题 |
--font-body-lg |
24px / 1.6 | 400 | 大正文、重要描述 |
--font-body |
20px / 1.6 | 400 | 默认正文 |
--font-caption |
16px / 1.5 | 400 | 辅助文字、时间戳 |
圆角 Tokens
| Token 名称 | 值 | 使用场景 |
|---|---|---|
--radius-sm |
4px | 标签、徽章 |
--radius-md |
8px | 按钮、输入框 |
--radius-lg |
12px | 卡片、对话框 |
--radius-xl |
16px | 大卡片、图片容器 |
--radius-full |
9999px | 圆形头像、胶囊按钮 |
动效 Tokens
基于 PICO OS 动效体系,定义 Duration、Easing、Timing 三层 Token。
Duration(时长)
| Token 名称 | 值 | 使用场景 |
|---|---|---|
--duration-fast |
200ms | 小元素进出(toast、badge、tooltip) |
--duration-normal |
300ms | 常规交互(按钮点击、卡片 hover) |
--duration-slow |
500ms | 大面积切换(页面转场、drawer 展开) |
Easing(缓动函数)
| Token 名称 | 值 | 使用场景 |
|---|---|---|
--ease-in |
cubic-bezier(0.4, 0, 1, 1) | 元素消失时使用 |
--ease-out |
cubic-bezier(0, 0, 0.2, 1) | 元素出现时使用 |
--ease-in-out |
cubic-bezier(0.4, 0, 0.2, 1) | 位置变化时使用 |
动效设计原则
- 限制选择:只使用 3 档时长,避免随意值(如 280ms、350ms)
- 可组合性:Duration + Easing 可以组合出 90% 的场景
- 性能优先:根据设备芯片能力自动降级动效复杂度
阴影 Tokens
| Token 名称 | 值(亮色模式) | 使用场景 |
|---|---|---|
--shadow-sm |
0 1px 3px rgba(0,0,0,0.1) | 轻微悬浮感(按钮、输入框) |
--shadow-md |
0 4px 12px rgba(0,0,0,0.1) | 中等悬浮(卡片、下拉菜单) |
--shadow-lg |
0 8px 24px rgba(0,0,0,0.12) | 强悬浮(对话框、浮层) |
使用指南
在代码中使用 Tokens
/* ✅ 正确:使用 Token */
.button {
padding: var(--spacing-md);
background: var(--color-primary);
border-radius: var(--radius-md);
transition: all var(--duration-normal) var(--ease-out);
}
/* ❌ 错误:硬编码数值 */
.button {
padding: 16px;
background: #0066ff;
border-radius: 8px;
transition: all 300ms ease-out;
}
AI Coding 中使用 Tokens
将 Tokens 定义保存为 design-tokens.json,放在项目根目录。使用 Cursor 或 Claude 时,在 Prompt 中说明:
"使用项目中的 Design Tokens(见 design-tokens.json), 为这个按钮添加样式。 - 使用 --spacing-md 作为内边距 - 使用 --color-primary 作为背景色 - 使用 --duration-normal 作为动画时长"
AI 会读取 Token 定义,生成符合规范的代码。
Token 命名规范
- 语义优先:使用
--color-primary而不是--color-blue - 层级清晰:
分类-属性-变体,如--spacing-md、--color-primary-hover - 避免缩写:使用
--duration-normal而不是--dur-norm