Design Tokens 标准命名与结构对照手册 #

Design Tokens(设计令牌)是将设计决策(颜色、间距、字体、圆角、阴影等)抽象并存储为跨平台代码键值对的标准规范。在企业级设计系统中,合理的 Tokens 架构能够抹平设计师在 Figma 中的定义与前端工程师在 CSS / iOS / Android 代码中的实现鸿沟。

本文档遵循 W3C Design Tokens Community Group (DTCG) 规范提案,梳理了企业级三层 Token 分层架构体系与标准化命名对照字典。


1. 企业级 Design Tokens 三层分层模型 #

一个健壮且可长期维护的 Tokens 体系严格划分为三个层级,下层引用上层,杜绝在组件中直接硬编码底层裸值:

┌────────────────────────────────────────────────────────┐
│  Tier 1: Global Tokens (全局基础层 / 原始物理值)          │
│  例如: blue-500 = #3B82F6, spacing-4 = 16px, font-14  │
└──────────────────────────┬─────────────────────────────┘
                           │ 映射与语义别名 (Alias)
                           ▼
┌────────────────────────────────────────────────────────┐
│  Tier 2: Semantic Tokens (语义决策层 / 语境抽象)         │
│  例如: surface-brand = blue-500, text-primary = gray-900│
│  支持根据主题模式 (Light / Dark) 动态切换映射引用         │
└──────────────────────────┬─────────────────────────────┘
                           │ 绑定与作用域限制 (Scopes)
                           ▼
┌────────────────────────────────────────────────────────┐
│  Tier 3: Component Tokens (组件专属层 / 私有属性)        │
│  例如: button-primary-bg = surface-brand               │
│        card-header-padding = spacing-4                 │
└────────────────────────────────────────────────────────┘

各层级职责与权限边界 #

Token 层级 谁负责维护 包含的内容 是否允许业务侧直接覆盖
Tier 1: Global Tokens 核心设计系统团队 调色板阶梯、无语境间距数值、原始字体族 严禁。全局原子字典,不具备主题感知
Tier 2: Semantic Tokens 核心设计系统 + 体验架构师 表面背景、文本可读性层级、边框、状态反馈 推荐使用。支撑 90% 的业务界面设计,自适应浅深色模式
Tier 3: Component Tokens 组件开发与模块设计师 按钮、输入框、表格专属尺寸与状态变化 局部受控。用于高定制业务组件,防止全局样式污染

2. 标准命名公式语法 (Naming Convention) #

推荐采用 Kebab-case 连接的结构化命名公式:

$$ \text{[Category]}-\text{[Concept]}-\text{[Property]}-\text{[Variant]}-\text{[State]} $$

  • Category(分类): color、spacing、size、radius、shadow、font
  • Concept(语义概念 / 语境): surface(表面/背景)、text(文本)、border(边框)、action(交互行为)
  • Property(属性类型): brand、neutral、success、danger、primary、secondary
  • Variant(变体/层级): subtle、muted、strong、inverse
  • State(交互状态): default、hover、active、focus、disabled

3. 色彩系统 Token 对照字典 (Color Tokens) #

3.1 表面背景层 (Surface & Background) #

语义 Token 标识 Light 模式映射 (Global) Dark 模式映射 (Global) CSS 变量名称 用途说明
surface-default white (#FFFFFF) gray-950 (#0B0F19) --color-surface-default 页面最底层主画布背景
surface-subtle gray-50 (#F9FAFB) gray-900 (#111827) --color-surface-subtle 浅灰斑马纹、次级底栏背景
surface-elevated white (#FFFFFF) gray-800 (#1F2937) --color-surface-elevated 悬浮卡片、下拉菜单、Dialog 弹窗
surface-inverse gray-900 (#111827) gray-100 (#F3F4F6) --color-surface-inverse 反色气泡 Tooltip、黑底横幅
surface-brand blue-600 (#2563EB) blue-500 (#3B82F6) --color-surface-brand 主品牌操作按钮、选定激活块
surface-success emerald-50 (#ECFDF5) emerald-950/40 --color-surface-success 成功提示 Alert 浅色背景
surface-error red-50 (#FEF2F2) red-950/40 --color-surface-error 报错警告 Alert 浅色背景
surface-disabled gray-100 (#F3F4F6) gray-800 (#1F2937) --color-surface-disabled 置灰不可点控件背景

3.2 文本与图标层 (Text & Icon) #

语义 Token 标识 Light 模式映射 Dark 模式映射 WCAG 对比度 用途说明
text-primary gray-900 (#111827) gray-50 (#F9FAFB) $\ge 12:1$ (AAA) 正文大标题、主要文本、高对比强调
text-secondary gray-600 (#4B5563) gray-400 (#9CA3AF) $\ge 4.5:1$ (AA) 次级说明文案、副标题、元数据
text-tertiary gray-400 (#9CA3AF) gray-500 (#6B7280) $\ge 3:1$ 输入框占位符 (Placeholder)、辅助提示
text-disabled gray-300 (#D1D5DB) gray-600 (#4B5563) 不计 禁用状态文字
text-inverse white (#FFFFFF) gray-900 (#111827) $\ge 15:1$ (AAA) 深色/高亮背景上的反色白字
text-brand blue-600 (#2563EB) blue-400 (#60A5FA) $\ge 4.5:1$ (AA) 品牌高亮链接、导航选中文字
text-error red-600 (#DC2626) red-400 (#F87171) $\ge 4.5:1$ (AA) 表单验证报错红字

3.3 描边与分割线层 (Border & Divider) #

语义 Token 标识 Light 模式映射 Dark 模式映射 CSS 变量名称 用途说明
border-subtle gray-100 (#F3F4F6) gray-800 (#1F2937) --color-border-subtle 列表轻量分割线、次级内边框
border-default gray-200 (#E5E7EB) gray-700 (#374151) --color-border-default 默认卡片外框、表格边界
border-strong gray-400 (#9CA3AF) gray-500 (#6B7280) --color-border-strong 表单输入框默认边框、勾选框边框
border-focus blue-600 (#2563EB) blue-400 (#60A5FA) --color-border-focus 聚焦状态外光晕 (Ring) 基础色
border-error red-600 (#DC2626) red-500 (#EF4444) --color-border-error 表单报错红框

4. 间距与空间 Token (Spacing & Sizing) #

间距遵循 8pt / 4pt 梯级,统一使用 REM 单位与 CSS 变量交付:

间距 Token 像素值 (px) rem 基准 ($1\text{rem}=16\text{px}$) Tailwind Class 作用域限制 (Figma Scopes)
spacing-1 4 px 0.25 rem gap-1 / p-1 Gap, Padding
spacing-2 8 px 0.5 rem gap-2 / p-2 Gap, Padding
spacing-3 12 px 0.75 rem gap-3 / p-3 Gap, Padding
spacing-4 16 px 1.0 rem gap-4 / p-4 Gap, Padding, Margin
spacing-5 20 px 1.25 rem gap-5 / p-5 Gap, Padding, Margin
spacing-6 24 px 1.5 rem gap-6 / p-6 Gap, Padding, Margin
spacing-8 32 px 2.0 rem gap-8 / p-8 Gap, Padding, Margin
spacing-10 40 px 2.5 rem gap-10 / p-10 Padding, Margin
spacing-12 48 px 3.0 rem gap-12 / p-12 Padding, Margin
spacing-16 64 px 4.0 rem gap-16 / p-16 Margin (仅限 Section 外边距)

5. 圆角与边框 Token (Border Radius) #

圆角 Token 像素值 (px) Tailwind 映射 推荐应用场景
radius-none 0 px rounded-none 直角表格单元格、全屏抽屉边框
radius-sm 2 px rounded-sm 微型 Checkbox、紧凑提示标签
radius-default 4 px rounded 紧凑型按钮、下拉菜单选项浮层
radius-md 6 px rounded-md 标准表单输入框、通用按钮
radius-lg 8 px rounded-lg 内容卡片 (Card)、警告框 Alert
radius-xl 12 px rounded-xl 模态弹窗 (Modal Dialog)、浮动面板
radius-2xl 16 px rounded-2xl 移动端底栏抽屉卡片、运营活动 Banner
radius-full 9999 px rounded-full 胶囊按钮 (Pill Button)、圆形头像 Avatar

6. 标高与阴影 Token (Elevation & Box Shadow) #

通过多层环境光与直射光叠加,模拟物理层级质感:

:root {
  /* Elevation 1: 基础卡片轻量浮起 */
  --shadow-elevation-1: 0 1px 2px 0 rgba(0, 0, 0, 0.05);

  /* Elevation 2: 悬停态 / 下拉菜单 Dropdown */
  --shadow-elevation-2: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.06);

  /* Elevation 3: 对话框 Dialog / 浮动导航栏 */
  --shadow-elevation-3: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.08);

  /* Elevation 4: 侧滑抽屉 Drawer / 全局通知 Toast */
  --shadow-elevation-4: 0 20px 25px -5px rgba(0, 0, 0, 0.12), 0 8px 10px -6px rgba(0, 0, 0, 0.08);
}

7. 从 Figma Variables 到前端工程化代码同步 #

借助开源工具 Style Dictionary,可以将 Figma 导出的 DTCG JSON 文件一键编译为全平台代码产物:

{
  "color": {
    "surface": {
      "brand": {
        "value": "{color.blue.600.value}",
        "type": "color",
        "description": "主要品牌操作按钮背景色"
      }
    }
  }
}

自动化生成的前端代码产物 #

CSS Variables 输出 (tokens.css) #

:root {
  --color-surface-brand: #2563eb;
}
[data-theme='dark'] {
  --color-surface-brand: #3b82f6;
}

TypeScript 常量与类型守卫 (tokens.ts) #

export const DesignTokens = {
  color: {
    surfaceBrand: 'var(--color-surface-brand)',
    textPrimary: 'var(--color-text-primary)',
  },
  spacing: {
    4: '1rem',
    8: '2rem',
  }
} as const;

export type DesignTokenKeys = typeof DesignTokens;

❓ 常见问题与答疑 (FAQ)

高频疑难解析与避坑指南
A

macOS 上主要使用 Command (⌘) 键,Windows 上对应 Ctrl 键;Option 键对应 Windows 的 Alt 键。建议使用快捷键 Ctrl + Shift + ?(Windows)或 Cmd + Shift + ?(Mac)随时调出内置快捷键助手。