UI 设计系统
生成设计令牌、创建调色板、计算排版比例、构建组件系统并准备开发交接文档。
目录
触发词
当您需要以下内容时,可使用此技能:
- "生成设计令牌"
- "创建调色板"
- "构建排版比例"
- "计算间距系统"
- "创建设计系统"
- "生成CSS变量"
- "导出SCSS令牌"
- "搭建组件架构"
- "文档化组件库"
- "计算响应式断点"
- "准备开发交接"
- "将品牌色转换为调色板"
- "检查WCAG对比度"
- "构建8pt网格系统"
首先澄清
在生成令牌或系统之前,请先确定以下输入。如果某项缺失或模糊且会影响结果,请询问;如果不会,则使用合理的默认值并说明你使用了哪个。
- 品牌主色(十六进制): 完整调色板的种子(驱动颜色色阶和WCAG对比度检查)。
- 风格预设: 现代、经典或活泼(设置字体、圆角和阴影样式)。
- 输出格式和框架: CSS、SCSS 或 JSON,用于 Tailwind/styled-components/Figma(驱动导出和开发交接)。
仅询问本次请求最相关的两到三个输入,而非整个列表。如果用户希望立即得到结果,则直接生成,并在顶部说明你的假设。
工作流
工作流 1:生成设计令牌
场景: 你拥有一个品牌色,需要一套完整的设计令牌系统。
步骤:
-
确定品牌色和风格
- 品牌主色(十六进制格式)
- 风格偏好:
modern|classic|playful
-
使用脚本生成令牌
python scripts/design_token_generator.py "#0066CC" modern json -
审查生成的类别
- 颜色:主色、辅色、中性色、语义色、表面色
- 排版:fontFamily, fontSize, fontWeight, lineHeight
- 间距:基于8pt网格的比例(0-64)
- 边框:圆角、宽度
- 阴影:无 到 2xl
- 动画:持续时间、缓动函数
- 断点:xs 到 2xl
-
以目标格式导出
# CSS 自定义属性 python scripts/design_token_generator.py "#0066CC" modern css > design-tokens.css # SCSS 变量 python scripts/design_token_generator.py "#0066CC" modern scss > _design-tokens.scss # JSON 用于 Figma/工具 python scripts/design_token_generator.py "#0066CC" modern json > design-tokens.json -
验证可访问性
- 检查颜色对比度是否符合 WCAG AA(普通文本 4.5:1,大文本 3:1)
- 确认语义色已定义对比色
工作流 2:创建组件系统
场景: 你需要使用设计令牌构建一个组件库。
步骤:
-
定义组件层级
- 原子:按钮、输入框、图标、标签、标记
- 分子:表单字段、搜索栏、卡片、列表项
- 有机体:页眉、页脚、数据表格、模态框
- 模板:仪表盘布局、认证布局
-
将令牌映射到组件
组件 使用的令牌 按钮 颜色、尺寸、边框、阴影、排版 输入框 颜色、尺寸、边框、间距 卡片 颜色、边框、阴影、间距 模态框 颜色、阴影、间距、z-index、动画 -
定义变体模式
尺寸变体:
sm: 高度 32px, 内边距X 12px, 字号 14px md: 高度 40px, 内边距X 16px, 字号 16px lg: 高度 48px, 内边距X 20px, 字号 18px颜色变体:
primary: 背景色 primary-500, 文字白色 secondary: 背景色 neutral-100, 文字颜色 neutral-900 ghost: 背景透明, 文字颜色 neutral-700 -
文档化组件API
- 带类型的 Props 接口
- 变体选项
- 状态处理(悬停、激活、聚焦、禁用)
- 可访问性要求
-
参考: 参见
references/component-architecture.md
工作流 3:响应式设计
场景: 你需要断点、流式排版或响应式间距。
步骤:
-
定义断点
名称 宽度 目标设备 xs 0 小手机 sm 480px 大手机 md 640px 平板电脑 lg 768px 小型笔记本 xl 1024px 台式机 2xl 1280px 大屏 -
计算流式排版
公式:
clamp(最小值, 首选值, 最大值)/* 视口宽度 320px 到 1200px,字号从 16px 到 24px */ font-size: clamp(1rem, 0.5rem + 2vw, 1.5rem);预计算的比例:
--fluid-h1: clamp(2rem, 1rem + 3.6vw, 4rem); --fluid-h2: clamp(1.75rem, 1rem + 2.3vw, 3rem); --fluid-h3: clamp(1.5rem, 1rem + 1.4vw, 2.25rem); --fluid-body: clamp(1rem, 0.95rem + 0.2vw, 1.125rem); -
设置响应式间距
令牌 手机 平板 桌面 --space-md 12px 16px 16px --space-lg 16px 24px 32px --space-xl 24px 32px 48px --space-section 48px 80px 120px -
参考: 参见
references/responsive-calculations.md
工作流 4:开发交接
场景: 你需要将设计令牌交接给开发团队。
步骤:
-
以所需格式导出令牌
# 用于 CSS 项目 python scripts/design_token_generator.py "#0066CC" modern css # 用于 SCSS 项目 python scripts/design_token_generator.py "#0066CC" modern scss # 用于 JavaScript/TypeScript python scripts/design_token_generator.py "#0066CC" modern json -
准备框架集成
React + CSS 变量:
import './design-tokens.css'; <button className="btn btn-primary">点击</button>Tailwind 配置:
const tokens = require('./design-tokens.json'); module.exports = { theme: { colors: tokens.colors, fontFamily: tokens.typography.fontFamily } };styled-components:
import tokens from './design-tokens.json'; const Button = styled.button` background: ${tokens.colors.primary['500']}; padding: ${tokens.spacing['2']} ${tokens.spacing['4']}; `; -
与 Figma 同步
- 安装 Tokens Studio 插件
- 导入 design-tokens.json
- 令牌自动与 Figma 样式同步
-
交接清单
- 令牌文件已添加到项目
- 构建管道已配置
- 主题/CSS 变量已导入
- 组件库已对齐
- 文档已生成
-
参考: 参见
references/developer-handoff.md
工具参考
design_token_generator.py
根据品牌色生成完整的设计令牌系统。
| 参数 | 值 | 默认值 | 描述 |
|---|---|---|---|
| brand_color | 十六进制颜色 | #0066CC | 品牌主色 |
| style | modern, classic, playful | modern | 设计风格预设 |
| format | json, css, scss, summary | json | 输出格式 |
示例:
# 生成 JSON 令牌(默认)
python scripts/design_token_generator.py "#0066CC"
# 经典风格,CSS 输出
python scripts/design_token_generator.py "#8B4513" classic css
# 活泼风格,摘要视图
python scripts/design_token_generator.py "#FF6B6B" playful summary
输出类别:
| 类别 | 描述 | 关键值 |
|---|---|---|
| colors | 调色板 | primary, secondary, neutral, semantic, surface |
| typography | 字体系统 | fontFamily, fontSize, fontWeight, lineHeight |
| spacing | 8pt 网格 | 0-64 比例,语义化 (xs-3xl) |
| sizing | 组件尺寸 | container, button, input, icon |
| borders | 边框值 | radius (按风格),width |
| shadows | 阴影样式 | none 到 2xl, inner |
| animation | 动效令牌 | duration, easing, keyframes |
| breakpoints | 响应式 | xs, sm, md, lg, xl, 2xl |
| z-index | 层叠系统 | base 到 notification |
快速参考表
颜色色阶生成
| 阶数 | 亮度 | 饱和度 | 用途 |
|---|---|---|---|
| 50 | 固定 95% | 30% | 细微背景 |
| 100 | 固定 95% | 38% | 浅色背景 |
| 200 | 固定 95% | 46% | 悬停状态 |
| 300 | 固定 95% | 54% | 边框 |
| 400 | 固定 95% | 62% | 禁用状态 |
| 500 | 原始色 | 70% | 基础/默认颜色 |
| 600 | 原始色 × 0.8 | 78% | 悬停(深色) |
| 700 | 原始色 × 0.6 | 86% | 激活状态 |
| 800 | 原始色 × 0.4 | 94% | 文本 |
| 900 | 原始色 × 0.2 | 100% | 标题 |
排版比例(1.25x 比率)
| 尺寸 | 值 | 计算 |
|---|---|---|
| xs | 10px | 16 ÷ 1.25² |
| sm | 13px | 16 ÷ 1.25¹ |
| base | 16px | 基础 |
| lg | 20px | 16 × 1.25¹ |
| xl | 25px | 16 × 1.25² |
| 2xl | 31px | 16 × 1.25³ |
| 3xl | 39px | 16 × 1.25⁴ |
| 4xl | 49px | 16 × 1.25⁵ |
| 5xl | 61px | 16 × 1.25⁶ |
WCAG 对比度要求
| 等级 | 普通文本 | 大文本 |
|---|---|---|
| AA | 4.5:1 | 3:1 |
| AAA | 7:1 | 4.5:1 |
大文本:≥18pt 常规 或 ≥14pt 粗体
风格预设
| 方面 | 现代 | 经典 | 活泼 |
|---|---|---|---|
| 无衬线字体 | Inter | Helvetica | Poppins |
| 等宽字体 | Fira Code | Courier | Source Code Pro |
| 默认圆角 | 8px | 4px | 16px |
| 阴影 | 分层、微妙 | 单层 | 柔和、明显 |
知识库
references/ 目录下的详细参考指南:
| 文件 | 内容 |
|---|---|
token-generation.md | 颜色算法、HSV 空间、WCAG 对比度、字体比例 |
component-architecture.md | 原子设计、命名约定、Props 模式 |
responsive-calculations.md | 断点、流式排版、网格系统 |
developer-handoff.md | 导出格式、框架设置、Figma 同步 |
验证清单
令牌生成
- 品牌色以十六进制格式提供
- 风格符合项目需求
- 所有令牌类别已生成
- 语义色包含对比值
组件系统
- 所有尺寸均已实现 (sm, md, lg)
- 所有变体均已实现 (primary, secondary, ghost)
- 所有状态正常工作 (hover, active, focus, disabled)
- 仅使用设计令牌(无硬编码值)
可访问性
- 颜色对比度符合 WCAG AA
- 焦点指示器可见
- 触摸目标 ≥ 44×44px
- 使用语义化 HTML 元素
开发交接
- 令牌以所需格式导出
- 框架集成已文档化
- 设计工具已同步
- 组件文档已完成
故障排除
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 生成的颜色不满足 WCAG 对比度 | 品牌色过于浅或饱和度过高 | 对浅色背景上的文本使用更深的色阶 (600+);使用对比度工具检查 |
| 令牌导出的值不正确 | 格式参数错误或颜色语法错误 | 确保十六进制颜色用引号引起来(例如 "#0066CC");验证格式为 json、css 或 scss |
| 排版比例过大/过小 | 默认 1.25x 比例不适合设计 | 修改 DesignTokenGenerator 类中的 type_scale_ratio(1.125 更紧凑,1.333 更宽松) |
| SCSS 变量与现有变量冲突 | 令牌命名冲突 | 为所有令牌添加项目命名空间前缀(编辑导出函数) |
| 设计工具显示不同颜色 | 颜色色阶生成中的十六进制舍入 | 使用 JSON 导出作为真理源;与 Tokens Studio 插件同步 |
| 间距值与网格不对齐 | 自定义间距与 8pt 网格混合 | 仅使用生成的水平系统值;避免任意像素值 |
| 阴影令牌在暗黑模式下看起来不对 | 阴影设计用于浅色背景 | 为暗黑模式创建单独的阴影令牌,使用更浅的不透明度值 |
成功标准
| 标准 | 目标 | 衡量方式 |
|---|---|---|
| 令牌一致性 | 代码库中零硬编码的颜色/间距值 | 代码检查规则违规次数 |
| WCAG AA 合规 | 所有文本颜色满足 4.5:1 对比度 | 自动对比度检查器或手动审查 |
| 导出格式覆盖 | CSS、SCSS 和 JSON 均能正确生成 | 使用每种格式运行生成器;验证输出 |
| 设计与开发同步 | 令牌更新到代码部署 <24 小时 | 从 Figma 变更到生产的时间 |
| 组件令牌覆盖 | 100% 的组件使用设计令牌 | 审查组件样式中的硬编码值 |
| 排版一致性 | 所有文本使用设计系统字体比例 | 跨所有页面进行视觉审查 |
| 响应式行为 | 流式排版在所有断点下工作 | 在 xs, sm, md, lg, xl, 2xl 宽度下测试 |
范围与限制
范围包括:
- 根据品牌色生成完整的设计令牌
- 调色板生成(主色、辅色、中性色、语义色)
- 使用模块化比例的排版系统
- 基于 8pt 网格的间距系统
- 组件尺寸、边框、阴影、动画令牌
- 导出为 CSS 自定义属性、SCSS 变量和 JSON
- 响应式断点定义
- WCAG 对比度参考表
范围不包括:
- 暗黑模式令牌生成(需要单独的颜色映射)
- 动画/动效设计库
- 图标系统生成
- 运行时主题切换实现
- Figma 插件或 API 集成(使用 Tokens Studio)
- 视觉回归测试
- 设计到代码的转换(使用 Figma Dev Mode 或 Locofy)
集成点
…
[已截断以进行翻译]