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