Repository Wiki
Brandon030722/ark-ui-skill

Design Tokens

Design Tokens 是一个贯穿全应用的设计变量系统,它把颜色、字体、间距、圆角、阴影、尺寸等视觉决策从组件代码中抽离出来,集中为一份可维护、可复用、可替换的"单一事实来源(Single Source of Truth)"。

Purpose and Scope

本页覆盖 Design Tokens 的完整机制:

  • Token 的定义位置与组织结构(源文件、分层方式)
  • Token 在应用中的消费方式(编译期引用、运行时读取、主题切换)
  • Token 与组件样式的关系,以及如何扩展或覆盖已有 Token
  • 语义化命名约定(primitive token → semantic token → component token)的设计意图

以下相关主题不在本页范围内,仅作导览:

  • 组件级别的具体样式实现,见 5-assets-and-examples/5.1-*(组件文档)
  • 图标与静态资源管理,见 5-assets-and-examples/5.2-*(资源文档)
  • 主题(Theme)的运行时切换机制与持久化,见主题相关页面

⚠️ 文档缺口说明:本次文档生成时,仓库中未能定位到与 "design tokens" 直接对应的源文件(未发现 tokens、theme、design 相关的配置文件、CSS 变量文件或常量定义文件)。以下内容基于对仓库结构的探索结果如实记录,不做任何虚构代码示例。若仓库后续补充了 token 体系,本页应同步更新。

Overview

概念

Design Tokens(设计令牌)是设计系统的最小可复用单元。一个 Token 本质上是一个命名的视觉属性值,例如:

Token 类别示例作用
颜色 Colorcolor-primary、color-surface品牌色、背景、状态色
排版 Typographyfont-size-md、font-weight-bold字号、字重、行高
间距 Spacingspacing-md、spacing-lg内外边距的统一节奏
圆角 Radiusradius-sm、radius-full一致的形状语言
阴影 Elevationshadow-1、shadow-2层级与深度
动效 Motionduration-fast、ease-standard统一的过渡体验

为什么要使用 Token

  1. 一致性:同一语义(如"主色")在所有组件中引用同一个 Token,避免散落的魔法值。
  2. 可维护性:修改一个 Token 值即可全局生效,无需逐个组件排查。
  3. 主题能力:Token 与具体值解耦后,只需为不同主题提供不同的 Token 值集(如亮色 / 暗色),即可实现主题切换。
  4. 设计—开发协作:设计与代码共享同一套命名,减少沟通歧义。

典型的三层 Token 架构

成熟的 Token 体系通常分为三层,每层职责不同:

Loading diagram...

上图为通用的 Token 分层参考模型(非本仓库实际代码,仅用于解释概念):

  • Primitive(原子):直接映射到具体值,如 color-blue-500 = #3B82F6,不含语义。
  • Semantic(语义):表达用途,如 color-primary = color-blue-500;换主题时只改这一层的指向。
  • Component(组件):面向具体组件的别名,如 button-bg-primary = color-primary,允许组件级覆盖。

Architecture

Design Tokens 在前端工程中的典型落地路径如下:

Loading diagram...

流程说明:

  1. Token 源:以结构化文件(JSON/CSS/TS)维护所有 Token 定义。
  2. 构建期转换:通过构建脚本(如 Style Dictionary)把源 Token 转译为各平台需要的格式——Web 端通常是 CSS 自定义属性(CSS Variables)。
  3. 消费层:全局样式与组件样式引用编译产物;需要在 JS 中取色的场景(图表库、Canvas)则引用 TS 常量或通过 getComputedStyle 读取。
  4. 运行时主题:CSS 变量天然支持运行时替换,通过在根元素切换 data-theme 属性或 class,即可让整套 Token 指向另一组值。

⚠️ 注意:以上架构图为该领域的通用参考实现。本仓库中未发现对应的构建脚本或 Token 源文件,因此无法给出带源码链接的实现细节。

核心消费模式(通用参考)

本节代码为该领域的通用示例,用于说明 Token 的典型用法。它们并非从本仓库源码中提取(仓库中未找到相关实现),请勿当作本项目的真实 API 使用。

模式一:CSS 自定义属性 + 属性选择器切换主题

css
1:root { 2 /* Primitive tokens */ 3 --color-blue-500: #3b82f6; 4 --color-gray-100: #f3f4f6; 5 6 /* Semantic tokens */ 7 --color-primary: var(--color-blue-500); 8 --color-surface: var(--color-gray-100); 9 --spacing-md: 16px; 10} 11 12/* 暗色主题:只改语义层指向,组件代码零改动 */ 13[data-theme='dark'] { 14 --color-primary: #60a5fa; 15 --color-surface: #1f2937; 16} 17 18.card { 19 background-color: var(--color-surface); 20 padding: var(--spacing-md); 21}

模式二:JS 侧读取 Token(图表 / Canvas 场景)

typescript
1// 通用示例:从 CSS 变量读取 Token 值 2export function getToken(name: string): string { 3 return getComputedStyle(document.documentElement) 4 .getPropertyValue(name) 5 .trim(); 6} 7 8const primaryColor = getToken('--color-primary'); // 自动跟随当前主题

模式三:TS 常量型 Token(类型安全)

typescript
1// 通用示例:类型安全的间距 Token 2export const spacing = { 3 xs: 4, 4 sm: 8, 5 md: 16, 6 lg: 24, 7 xl: 32, 8} as const; 9 10export type Spacing = keyof typeof spacing;

语义化命名约定(建议采用)

前缀 / 层级格式示例
Primitive{category}-{value-scale}color-blue-500、font-size-14
Semantic{category}-{role}color-primary、color-text-secondary
Component{component}-{property}-{role}button-bg-primary、card-border-radius

命名原则:

  • 小写 + 连字符,与 CSS 变量习惯一致。
  • 语义层描述"用途"而非"外观":color-danger 优于 color-red——换主题时红色可能变成橙色。
  • 组件层显式归属,便于局部覆盖与审计。

失败模式与注意事项(通用经验)

场景风险缓解方式
硬编码颜色绕过 Token主题切换后出现"漏网"样式Code Review / Lint 规则(如 stylelint declaration-property-value-disallowed-list)禁止十六进制字面量
语义层直接引用原子值过多换主题需改大量 Token强制"组件 → 语义 → 原子"单向依赖
循环引用Token A 引用 B,B 又引用 A构建期做依赖图校验
深色主题遗漏部分语义 Token 未提供暗色值构建期做"明暗 Token 集合对齐"检查
JS 与 CSS 双份 Token两处不同步单一源文件生成两端产物,禁止手写副本

扩展指南

为该项目新增 Token 时建议遵循:

  1. 先语义后取值:先确定这是原子 Token 还是语义 Token,避免直接在组件里写值。
  2. 只在原子层出现具体值:语义层与组件层一律引用上级 Token。
  3. 提供完整主题覆盖:新增语义 Token 时,同时检查所有主题(亮 / 暗等)是否需要对应值。
  4. 保持命名对称:如新增 color-primary,考虑配套的 color-primary-hover、color-primary-active、color-primary-disabled 等状态族。
  5. 同步类型定义:若存在 TS 常量映射,需同步更新类型联合,保持编译期校验。

Professional Notes

  • 并发 / 一致性:Token 本身是静态资产,无运行时并发问题;需要注意的是"多端产物一致性"——同一 Token 必须在 CSS、SCSS、TS 等所有编译产物中值一致,应由单一源生成。
  • 性能:CSS 变量查找发生在渲染期,层级过深(超过 ~3 层引用链)会带来可感知的重排成本;建议语义层直接引用原子层。
  • 测试:可对 Token 做两类测试——(1) 结构测试:校验明暗主题 Token 键集合一致;(2) 快照测试:对编译产物做快照,防止意外改动。
  • 本仓库现状:在本次探索中,仓库未发现任何 design tokens 的实现文件(搜索 token、theme、css variable 等关键词均无命中相关源码)。若该能力存在于其他仓库(如独立设计系统包)或尚未落地,请在补充实现后更新本页并附上真实源码引用与目录结构。

Sources

(2 files)
assets/react
assets/tokens