mcpField
D
design-tokens

design-tokens

github.com/dylanfeltus设计与 UI180190 次安装7 周前更新
代码仓库

关于 design-tokens

用于生成设计令牌的 Skill,通过公式和对比度检查构建字体比例、调色板、间距系统及暗色模式方案。适合搭建设计系统,可输出 CSS 自定义属性、Tailwind 配置或 JSON 令牌。

主要功能

  1. 01生成基于比例的字体阶梯
  2. 02构建色阶与语义令牌
  3. 03按 WCAG 检查颜色对比度
  4. 04创建系统化间距尺度
  5. 05推导暗色模式配色
  6. 06导出 CSS、Tailwind 或 JSON

适用场景

  1. 01为新设计系统建立令牌
  2. 02创建符合无障碍要求的调色板
  3. 03构建 Tailwind 主题或 CSS 变量
  4. 04从浅色配色推导暗色主题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dylanfeltus/skills --skill design-tokens

安装后在 Claude Code 中输入/design-tokens确认已加载。

附带文件README.md

详细介绍

设计令牌

通过计算而非猜测,生成字号比例、调色板、间距系统和暗色模式衍生色。包含 WCAG 对比度检查、系统化间距网格,以及可用于生产环境的 CSS/Tailwind 输出。

适用场景

  • 用户正在为新项目搭建设计系统
  • 用户需要字号比例、调色板或间距系统
  • 用户需要符合 WCAG 标准的颜色组合
  • 用户希望从浅色调色板推导出暗色模式颜色
  • 用户询问“设计令牌”或“主题设置”
  • 构建 Tailwind 配置或 CSS 自定义属性

核心理念

  • 计算优先于审美。 比例应遵循既定比率,而非采用随意的数值。
  • 默认考虑无障碍性。 每种文字/背景组合都必须通过 WCAG AA 标准。
  • 系统化。 每个数值都应能通过基础值和比率推导得出。
  • 可移植。 输出为 CSS 自定义属性、Tailwind 配置或 JSON 令牌。

生成字号比例

计算公式
fontSize = baseFontSize × ratio^step
推荐比率
比率名称数值最适用场景
小二度1.067紧凑,差异最小密集型 UI、仪表板
大二度1.125渐变细微应用、数据密集型界面
小三度1.200均衡、通用大多数网站、SaaS
大三度1.250层级清晰营销网站、博客
纯四度1.333对比强烈编辑类内容、落地页
增四度1.414效果突出大胆的设计、作品集
纯五度1.500效果非常突出主视觉区块占比较大的设计
生成比例尺

给定一个基准字号(通常为 16px)和一个比率:

Step -2: 16 / ratio² = xs
Step -1: 16 / ratio  = sm
Step  0: 16          = base
Step  1: 16 × ratio  = lg
Step  2: 16 × ratio² = xl
Step  3: 16 × ratio³ = 2xl
Step  4: 16 × ratio⁴ = 3xl
Step  5: 16 × ratio⁵ = 4xl
Step  6: 16 × ratio⁶ = 5xl

四舍五入到最接近的 0.5px,或转换为 rem(÷ 16)。

行高规则
字号行高用途
≤ 14px1.6–1.7小号文字、说明文字
16–20px1.5–1.6正文
20–32px1.3–1.4子标题
32–48px1.1–1.2标题
48px+1.0–1.1展示/主视觉文字

经验法则: 字号越大,行高越小。

字间距规则
尺寸字间距原因
小号文字(≤14px)0.01–0.02em稍微加宽,提升可读性
正文0em(正常)保持默认
子标题-0.01em稍微收紧
标题-0.02em 到 -0.03em随字号增大而收紧
展示文字-0.03em 到 -0.05em大字号下收紧字距
字重搭配
角色字重Tailwind
正文400(常规)font-normal
正文强调500(中等)font-medium
子标题600(半粗)font-semibold
标题700(粗体)font-bold
展示文字800(特粗)font-extrabold
输出示例(CSS 自定义属性)
:root {
  --font-size-xs: 0.694rem;    /* 11.1px */
  --font-size-sm: 0.833rem;    /* 13.3px */
  --font-size-base: 1rem;      /* 16px */
  --font-size-lg: 1.2rem;      /* 19.2px */
  --font-size-xl: 1.44rem;     /* 23px */
  --font-size-2xl: 1.728rem;   /* 27.6px */
  --font-size-3xl: 2.074rem;   /* 33.2px */
  --font-size-4xl: 2.488rem;   /* 39.8px */
  --font-size-5xl: 2.986rem;   /* 47.8px */
}

生成调色板

步骤 1:选择基色

每个调色板都需要:

令牌用途示例
primary主要品牌色、CTA品牌色
neutral文字、边框、背景灰色(暖色/冷色/纯灰)
success成功状态绿色
warning警示状态琥珀色/黄色
error危险操作状态红色
info信息提示蓝色(可与主色重叠)
步骤 2:生成明暗色阶(50–950)

为每种基色生成包含 10 个等级的明暗色阶。基色通常对应 500 级。

方法:调整 HSL

从基色的 HSL 值开始:

等级明度调整饱和度调整
50+45%-30%
100+38%-25%
200+28%-15%
300+18%-5%
400+8%0%
5000%(基色)0%(基色)
600-8%+5%
700-18%+5%
800-28%0%
900-38%-10%
950-45%-20%

将所有数值限制在范围内:明度 0–100%,饱和度 0–100%。

步骤 3:语义令牌映射

将各级色阶映射到语义角色:

/* Light mode */
--color-bg: var(--neutral-50);
--color-bg-subtle: var(--neutral-100);
--color-bg-muted: var(--neutral-200);
--color-border: var(--neutral-200);
--color-border-strong: var(--neutral-300);
--color-text-muted: var(--neutral-500);
--color-text-subtle: var(--neutral-600);
--color-text: var(--neutral-900);
--color-text-heading: var(--neutral-950);

--color-primary: var(--primary-600);
--color-primary-hover: var(--primary-700);
--color-primary-bg: var(--primary-50);
--color-primary-text: white;

WCAG 对比度检查

公式

对比度 = (L1 + 0.05) / (L2 + 0.05)

其中,L1 = 较亮颜色的相对亮度,L2 = 较暗颜色的相对亮度。

相对亮度
For each channel (R, G, B):
  sRGB = channel / 255
  linear = sRGB <= 0.04045 ? sRGB / 12.92 : ((sRGB + 0.055) / 1.055) ^ 2.4

L = 0.2126 × R_linear + 0.7152 × G_linear + 0.0722 × B_linear
WCAG 要求
级别比率适用范围
AA 普通文本≥ 4.5:1正文(< 18px 或 < 14px 粗体)
AA 大号文本≥ 3:1≥ 18px 常规字重或 ≥ 14px 粗体
AAA 普通文本≥ 7:1增强的无障碍性
AA UI 组件≥ 3:1边框、图标、焦点环
快速参考(白色 #FFFFFF 上的中性色)
色阶约略对比度是否通过
300~2.5:1❌ 仅用于装饰
400~3.5:1✅ 大号文本、UI
500~4.5:1✅ AA 正文文本
600~6:1✅ AA,舒适易读
700~8:1✅ AAA 正文文本
以编程方式检查对比度

生成调色板时,务必验证:

  1. text (900) 在 bg (50) 上 → 必须 ≥ 4.5:1
  2. text-muted (500) 在 bg (50) 上 → 必须 ≥ 4.5:1
  3. primary (600) 在 white 上 → 必须 ≥ 4.5:1
  4. primary-text 在 primary (600) 上 → 必须 ≥ 4.5:1
  5. border (200) 在 bg (50) 上 → 必须 ≥ 3:1

如果某种组合未通过,就将较深的颜色加深一个色阶,直到通过为止。


间距系统

以 4 为基数的比例(推荐)

所有数值都是 4px 的倍数。规律清晰、保持一致,并且适用于大多数字号。

:root {
  --space-0: 0px;
  --space-0.5: 2px;
  --space-1: 4px;
  --space-1.5: 6px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 20px;
  --space-6: 24px;
  --space-8: 32px;
  --space-10: 40px;
  --space-12: 48px;
  --space-16: 64px;
  --space-20: 80px;
  --space-24: 96px;
  --space-32: 128px;
}

这与 Tailwind 的默认比例完全一致。

间距使用指南
场景间距数值
行内图标间距space-1 到 space-24–8px
按钮内边距space-2 × space-48px 16px
卡片内边距space-4 到 space-616–24px
区块间距(元素之间)space-6 到 space-824–32px
区块内边距(容器)space-12 到 space-1648–64px
页面区块垂直节奏space-16 到 space-2464–96px
容器宽度比例
令牌宽度用途
sm640px窄内容(身份验证表单)
md768px博客文章、文档
lg1024px应用布局
xl1280px宽布局
2xl1536px全宽仪表板

深色模式推导

反转模式

不要手动挑选深色模式的颜色,而要用系统化的方式推导:

Light mode          →  Dark mode
neutral-50  (bg)    →  neutral-950 (bg)
neutral-100 (bg-subtle) → neutral-900 (bg-subtle)
neutral-200 (border) → neutral-800 (border)
neutral-300 (border-strong) → neutral-700 (border-strong)
neutral-500 (text-muted) → neutral-400 (text-muted)
neutral-600 (text-subtle) → neutral-300 (text-subtle)
neutral-900 (text)  →  neutral-50  (text)
neutral-950 (heading) → neutral-50 (heading)

**规则:**背景色阶反转(50↔950、100↔900、200↔800)。文本色阶也类似反转。中间色阶(400–600)则移动约 1–2 个色阶。

深色模式下的主色
  • 使用更浅的色阶:用 primary-400 或 primary-500 替代 primary-600
  • 在深色背景上稍微降低饱和度(避免视觉疲劳)
  • 验证其与 neutral-900 或 neutral-950 背景之间的对比度
深色模式的语义令牌
/* Light */
:root {
  --color-bg: var(--neutral-50);
  --color-text: var(--neutral-900);
  --color-primary: var(--primary-600);
}

/* Dark */
.dark {
  --color-bg: var(--neutral-950);
  --color-text: var(--neutral-50);
  --color-primary: var(--primary-400);
}

其优势在于:组件引用的是语义令牌,而不是原始色阶。切换主题只需替换令牌映射。


输出格式

CSS 自定义属性
:root {
  /* Type */
  --font-size-base: 1rem;
  --font-size-lg: 1.2rem;
  /* Colors */
  --color-primary-500: hsl(220, 80%, 50%);
  /* Spacing */
  --space-4: 1rem;
}
Tailwind 配置
module.exports = {
  theme: {
    extend: {
      fontSize: {
        'xs': '0.694rem',
        'sm': '0.833rem',
        'base': '1rem',
        'lg': '1.2rem',
        'xl': '1.44rem',
      },
      colors: {
        primary: {
          50: 'hsl(220, 50%, 95%)',
          500: 'hsl(220, 80%, 50%)',
          900: 'hsl(220, 60%, 15%)',
        },
      },
    },
  },
}
JSON 设计令牌(W3C 格式)
{
  "color": {
    "primary": {
      "500": { "$value": "hsl(220, 80%, 50%)", "$type": "color" }
    }
  },
  "fontSize": {
    "base": { "$value": "1rem", "$type": "dimension" }
  }
}

分步设置完整的设计令牌

  1. **询问:**项目是什么类型?(营销网站、SaaS 应用、仪表板?)
  2. **字号比例:**根据项目类型选择比例 → 生成比例尺
  3. **颜色:**获取品牌色 → 为主色、中性色和语义色生成色阶
  4. **验证对比度:**根据 WCAG AA 检查所有文本/背景组合
  5. **间距:**使用以 4 为基数的比例(与 Tailwind 保持一致)
  6. **深色模式:**使用反转模式从浅色调色板推导
  7. **输出:**生成 CSS 自定义属性和/或 Tailwind 配置

示例

示例 1:“为 SaaS 仪表板设置设计令牌”
  • 字号比例:小三度(1.2),基准字号为 16px — 层级清晰但不过分突出
  • 颜色:从品牌蓝生成,使用暖灰色作为中性色
  • 间距:以 4 为基数(Tailwind 默认值)
  • 深色模式:完整推导
示例 2:“我需要根据这个品牌色生成调色板:#6366F1”
  • 解析 HSL:约 239°、84%、67%
  • 使用色阶生成方法生成 50–950 色阶
  • 映射语义令牌
  • 验证所有文本/背景组合的 WCAG 对比度
  • 输出为 CSS + Tailwind 配置
示例 3:“为博客创建字号比例”
  • 比例:大三度(1.25)——为编辑内容提供清晰的层级
  • 基准:18px(略大,适合长文阅读)
  • 为每个级别生成包含行高和字间距的比例

评论

支持 Markdown