实验 10 · 29 分钟 · 入门
同一作品,长成你的样子
用设计 token 建立两套一致主题,而不是在 CSS 里到处改颜色。
完成后你能
本课目标
- 理解颜色、字体、间距 token
- 让组件从 token 读取样式
- 实现可访问的主题切换
开始前
准备这些
- 复制上一课的 practice-planner.html 到 10-theme-system
- 保留功能不变,只调整视觉系统
01 · 先列规则,再选颜色
设计系统不是颜色收藏。先定义页面底色、文字色、弱文字、主色、边框、圆角、间距和字体,再让所有组件使用这些变量。
本课做“林地”和“墨蓝”两套主题。每套都只设一个主色与一组中性色,结构和信息层级必须完全一致。
示例
:root {
--color-bg: #f5f0e6;
--color-text: #242622;
--color-muted: #62655d;
--color-accent: #194b3a;
--color-line: rgba(36, 38, 34, .16);
--space-1: .5rem;
--space-2: 1rem;
--space-3: 1.5rem;
--radius: .35rem;
}02 · 让 Agent 重构为 token
这一步只重构样式来源,不改变功能。明确“不改功能和文案”是本轮最重要的边界。
复制给 Agent
请修改 10-theme-system/theme-system.html(内容来自上一课的计划器),不要改变任何功能和文案。
先扫描 CSS 中所有颜色、间距、圆角和字体声明,整理为语义化 CSS 自定义属性。组件只能使用 token,不直接写重复色值。
建立“林地”和“墨蓝”两套主题;主题切换按钮要说明当前主题;选择保存到 localStorage;系统 prefers-reduced-motion 时取消主题过渡;按钮 hover、focus、disabled 状态在两套主题中都清楚。
完成后列出 token 表,并说明哪些组件使用它们。03 · 检查一致性而不是新鲜感
切换主题时,布局、字号层级、按钮位置和交互都不应跳动。主题只改变视觉语言,不改变任务路径。
- 分别截取两套主题的同一页面状态。
- 叠放截图,确认结构位置一致。
- 检查主按钮、次按钮、输入框、错误文字和焦点五种状态。
- 刷新页面,确认主题选择保留。
04 · 做一次 token 审计
不是所有数字都必须变量化。只复用一次、表达特定几何关系的值可以保留;跨组件重复或承载语义的值应该进入 token。
复制给 Agent
请审计 theme-system.html:搜索所有十六进制、rgb、px 间距和 border-radius。列出仍直接写在组件里的值,并判断应成为 token 还是保留为局部特例。先给审计表,不要自动修改。不要跳过
完成检查
逐项在真实页面中验证。勾选状态只保存在这台设备的浏览器中。
0 / 6 已完成
这一课完成了。产物留下来,下一课会继续用到。
常见错误
卡住时先看这里
- 把变量命名为 green1、blue2
- 使用 bg、text、accent、danger 等语义名称。
- 主题切换同时换布局
- 视觉主题与信息结构分开。
- 只检查默认状态
- 同时检查 hover、focus、disabled 和 error。
可选加练
再多走一步
增加一个“高对比”主题,但仍复用相同组件与结构。