Prompts-MCP 686 skills · ai / design / design-pattern / framework / fundamentals / habit / lang / tech-selection /mcp/sse
design design/design-language/tokens-and-theming.reference.md medium

tokens-and-theming.reference

Tokens & Theming · 详细参考

主入口:tokens-and-theming.md。本文是完整变量表与互换格式。

1. 完整三层变量表

:root {
  /* ---- L1 primitive:原始调色盘,不直接给组件用 ---- */
  --blue-600:#0052CC; --blue-700:#0747A6;
  --slate-50:#F8FAFC; --slate-100:#F1F5F9; --slate-500:#64748B; --slate-900:#0F172A;
  --green-600:#15803D; --amber-500:#D97706; --red-600:#DC2626;

  /* ---- L2 semantic:角色别名,组件消费这一层 ---- */
  --surface:           var(--slate-50);
  --surface-elevated:  #FFFFFF;
  --text-primary:      var(--slate-900);
  --text-secondary:    var(--slate-500);
  --interactive:       var(--blue-600);
  --interactive-hover: var(--blue-700);     /* 深 ~12% */
  --border:            var(--slate-100);
  --success: var(--green-600); --warning: var(--amber-500); --error: var(--red-600);
  /* on-X 内容色,保证文字达对比度 */
  --on-interactive:#FFFFFF; --on-surface: var(--slate-900);

  /* ---- 间距 / 圆角 / 字号(同样可分层) ---- */
  --space-1:8px; --space-2:16px; --space-3:24px; --space-4:32px; --space-6:48px;
  --radius-sm:8px; --radius-md:12px; --radius-lg:20px;
  --text-sm:14px; --text-base:16px; --text-lg:20px; --text-xl:25px;

  /* ---- L3 component:可选,组件局部别名 ---- */
  --button-bg:        var(--interactive);
  --button-bg-hover:  var(--interactive-hover);
  --button-fg:        var(--on-interactive);
  --card-bg:          var(--surface-elevated);
  --card-border:      var(--border);
}

2. 换肤覆盖层(只动 semantic)

[data-theme="luxury"] {
  --interactive:#6E1423; --interactive-hover:#5A0F1D;
  --surface:#F4EADE; --text-primary:#0A0A0A;
}
[data-theme="dark"] {
  --surface:#18181B; --surface-elevated:#27272A;
  --text-primary:#FAFAFA; --text-secondary:#A1A1AA;
  --interactive:#A855F7; --interactive-hover:#9333EA; --border:#3F3F46;
  --on-surface:#FAFAFA;
}

3. Light / Dark 三种实现

/* (a) 自动 */
@media (prefers-color-scheme: dark) {
  :root { --surface:#18181B; --text-primary:#FAFAFA; /* ... */ }
}
/* (b) 手动:JS 在 <html> 上切 data-theme,配 localStorage 持久化 */
/* (c) light-dark():需根上声明 color-scheme */
:root { color-scheme: light dark; }
.panel { background: light-dark(#FFFFFF, #18181B); color: light-dark(#0F172A, #FAFAFA); }

生产组合:默认 prefers-color-scheme 自动,[data-theme] 覆盖用户手选。

4. W3C DTCG 互换格式

跨工具交换用 W3C Design Tokens 格式($value 必填 + $type,别名用花括号引用),经 Style Dictionary 编译成各端变量:

{
  "color": {
    "blue":        { "$type": "color", "$value": "#0052CC" },
    "interactive": { "$type": "color", "$value": "{color.blue}" }
  },
  "space": { "2": { "$type": "dimension", "$value": "16px" } }
}

$type 支持 color / dimension / fontFamily / fontWeight / duration / cubicBezier / number,及复合类型 shadow / border / typography / gradient。

5. 常见错误

  • 组件里写裸 hex → 换肤改不动,到处漏改。
  • semantic 跳过直接 primitive 给组件 → 失去换肤入口。
  • 换肤时把整套 primitive 全复制改 → 应只覆盖 semantic 映射。
  • 忘了 on- 内容色 → 深色模式文字对比度崩。