老周想开一家叫「暖岛」的咖啡馆。他一开始的想法很简单:墙刷成喜欢的米色,买几张网红椅子,菜单字体挑好看的。可真动工才发现,米色有几十种,椅子和桌子高度对不上,菜单上的字混在一起像夜市招牌。装修师傅提醒他:你得先有一份整体方案,让颜色、家具、字体、摆件都服从同一套规则。AI 生成设计系统,就是给数字产品做这样一份「整店方案」——从一句「温暖、治愈、燕麦拿铁」的关键词出发,自动生成完整的颜色体系、字体阶梯和组件库,再用统一的规则把它们串起来。本文就带你看完这条流水线:关键词如何变成色板,色板如何长成组件,组件如何通过校验、切换主题,直到设计师与开发者在同一张图纸上协作。
对 AI 从业者而言,理解设计生成系统意味着把「审美直觉」变成「可计算、可复用、可校验」的工程能力,这是在 AI 驱动 UI 设计时代最有价值的跨界资本。
可视化演示
展示AI生成设计系统三大核心:色彩生成(关键词→语义映射→HSL和谐→四色体系×五级渐变20个Token+WCAG AA+校验)、字体与设计Token(1.25比例模块化字阶xs-xl+统一Token变量设计开发共享)、主题切换与一致性(Light/Dark双主题CSS变量切换+4组件×2主题8组Token自动校验一致性100%),三模式切换理解设计系统全貌。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+C1+'
设计系统概览
老周的第一版装修方案,是每个区域单独下单:吧台选复古绿,座位区选雾霾蓝,外带区选了明黄。单品各有各的好看,可推门进去却像误入了三家店的拼盘。师傅说,装修不是买齐单品,而是先定规则——什么颜色打底、什么字体做门头、什么高度的桌椅搭配。这才有了「整店方案」。
设计系统的本质,就是数字产品世界的「整店方案」。它把颜色、字体、组件库这些可复用资产,连同「怎么用它们」的规则一起沉淀下来。组件是看得见的家具,设计 Token 是看不见的施工标准——杯子的直径、墙漆的色号、菜单的字号,都先定义成变量,再被各处引用。
AI 的介入,让这份方案从「人工梳理」变成「自动生成」。你只需给出品牌关键词,AI 就能产出候选色板、字阶与组件骨架;人负责选型与审核。衡量一套设计系统成熟度,常看「组件接入率」——有多少组件在真正使用 Token 而非写死数值:
有了整店方案,后面每一步都顺了。老周点点头:那就照这份图纸,让 AI 把颜色、字号、家具一件件「生成」出来给我们看看。
- 覆盖率衡量设计系统落地程度的指标,代表有多少生产代码真正受 Token 约束。
- 分子「已接入Token的组件数」已用 Token 变量替换硬编码样式的组件数量。
- 分母「全部组件数」产品中所有可统计的组件,包含新老组件。
- 乘以 100%把比值转化为百分比,便于团队设定验收阈值。
关键词到色板
老周对师傅说:我想要「温暖、治愈、燕麦拿铁」的感觉。师傅听懂了,可 AI 怎么听懂?它把每个词翻译成「颜色语义」:温暖靠近橙黄,治愈靠近柔和低饱和,燕麦拿铁靠近米色系——然后在色彩空间里为这些语义找到落点。
这条流水线的第一站是色板生成。先做关键词提取:从需求描述里捞出和色彩强相关的词;再做语义映射:把这些词与已知色相家族的语义进行比对,选出最近的「色相锚点」;最后做色阶插值:在锚点与明度两端之间均匀地插出一整条刻度,得到 9 档语义色板。
比如锚定主色相 30°(暖橙),从近白的奶油色(明度 95%)到深棕(明度 40%)插出 9 档。插值在颜色空间里逐通道进行,公式如下:
老周看着屏幕上从奶油白渐变到深咖啡的一排小方块,像极了菜单上从拿铁到浓缩的色阶图——他忽然明白,AI 不是在「找颜色」,而是在「养一条颜色光谱」。
- 关键词输入用户的初始品牌词,例如「温暖、治愈、燕麦拿铁」。
- 语义映射把自然语言词嵌入到色彩语义空间中,找出最接近的色相家族。
- 首尾色值 C₁、C₂由色相锚点决定的起始色与结束色,通常对应明度两极。
- 插值公式t 从 0 到 1 变化时,RGB 或 HSL 各通道按比例过渡,生成连续色阶。
字阶与Token
菜单上,店名、分类标题、饮品名、价格、注释,字号不能随手调。老周发现师傅给出的字号表是有规律的:每个级别都按同一比例放大,像台阶一样整齐。这就是「模块化字阶」。
字阶公式:基准字号 $f_0$(正文 14px),配比 $r$(如 1.25),第 $n$ 级字号就是 $f_0$ 乘以 $r$ 的 $n$ 次方。这样无论标题、正文还是注释怎么组合,视觉层级始终和谐:
光有字号还不够,所有设计决策都要沉淀为「设计 Token」——一种带语义名字的变量:--brand-5 表示品牌色第 5 档,--font-3 表示第 3 级字号,--space-4 表示 4px 网格上的第 4 档间距。Token 分色彩、字体、间距、圆角、阴影等类别,命名规范是「类别-含义-序号」,间距刻度则遵循 4px 基准网格制。
老周看着这份字号刻度表,就像看着咖啡杯从小杯到超大杯整整齐齐排成一列——每一级只多一点点,却始终是一家人。
- 基准字号 f₀设计系统的最小正文单位,通常是 14px 或 16px。
- 等比配比 r相邻两级字号的固定倍率,常见取 1.25 或 1.333。
- 幂次 n第几级字号,n 越大字号越大,层级越高。
- 第 n 级字号 fₙ基准值乘以配比的 n 次幂,得到该级实际字号。
组件库生成
师傅建议老周:杯子、托盘、桌椅都别定做,选「标准件」。标准件便宜、耐换、坏了随时补。设计系统里,组件库就是这些标准件:按钮、卡片、输入框、弹窗,全部由可复用的标准件构成。
组件怎么生成?三步走。组件拆解:把一个组件拆成结构骨架(容器、标题、内容、操作区)与状态(默认、悬停、禁用);属性规范:用 Token 填充各部分——背景用 --brand-5、文字用 --font-3、圆角用 --radius-2;代码生成:AI 按模板输出组件代码,保证任何页面引用的都是同一套取值。
组件的间距与圆角同样来自刻度,常用 4px 基准网格:间距随索引线性增长,所有尺寸都是 4 的整数倍,页面在任何屏幕上都对得齐:
老周的咖啡馆里,吧台、外带区、二楼座位用着同一批杯子,只是不同分区搭配不同颜色的杯垫——组件是标准件,Token 是杯垫,换杯垫就能换氛围。
- 基准间距 s₀最小网格单元,通常取 4px。
- 序号 n间距的档位编号,n 越大留白越大。
- 第 n 档间距 sₙ基准值乘以序号,得到 4、8、12、16… 的等差刻度。
一致性校验
装修完工,老周请来监理:墙漆色号对不对?灯光下菜单字清不清楚?门头、杯子、外卖袋上的 logo 颜色一不一样?这场「验收」,在设计系统里叫一致性校验。
校验分三关。Token 检查:扫描代码里有没有绕过 Token、直接写死的色值字号;对比度校验:计算文字与背景的对比度是否达到 WCAG AA 标准(正文至少 4.5:1);视觉回归:对改版前后的页面截图做像素级比对,差异超阈值就报警并生成差异报告。
对比度公式:取两个颜色的相对亮度 $L_1$、$L_2$,各加 0.05(防止纯黑纯白除零),用较亮值除以较暗值:
监理在验收单上画勾:色号准、字迹清、logo 统一。老周舒了口气——AI 不是把活干完就撒手,而是陪着把每一处细节都验收到位。
- 较亮亮度 L亮两色中相对亮度较大的那个。
- 较暗亮度 L暗两色中相对亮度较小的那个。
- 加 0.05避免纯黑(亮度 0)导致分母为零。
- 比值 ≥ 4.5WCAG AA 对正文对比度的最低要求。
主题切换
冬天,老周给咖啡馆换了整套软装:暖橙灯罩、厚绒椅垫、深色桌布。他没敲一堵墙,也没换一件家具。这套「换软装」的思路,就是主题切换。
实现机制是「一层变量、两套取值」:所有组件只引用 Token,不引用具体值;深浅两套主题各自维护一份 Token 映射——浅色主题下 --brand-5 是浅紫,深色主题下它是暗紫。切换时只需换掉这一层映射,整个应用的颜色、字阶、间距、阴影同步变化,这就是主题变量的切换机制,也支持跟随系统动态适配。
判断某个背景上该配深字还是浅字,需要知道颜色的「相对亮度」。相对亮度不是简单取 RGB 平均,而是按人眼敏感度加权:绿色权重最大,蓝色最小:
老周的咖啡馆换季只花一个下午:换杯垫、换灯罩、换桌布,其他全都照旧——这正是 Token 主题切换的魅力:换一套取值映射,就是一个全新的氛围。
- R、G、B 分量经过伽马线性化后的 RGB 通道值(范围 0~1)。
- 人眼权重0.2126、0.7152、0.0722 分别对应红、绿、蓝的敏感度。
- 相对亮度 L加权求和后的结果,用于比较颜色明暗。
设计开发协同
设计图定稿后,最怕施工队「自由发挥」:师傅凭手感调了墙漆比例,菜单字号换了字体,最后和图纸差了十万八千里。所以老周要求:设计师和施工队必须看同一份图纸。
在工程里,这份「图纸」就是 Token 仓库。设计师在 Figma 里改一个 --brand-5,代码仓库里的 CSS 变量同步更新,页面无需手工改动。AI 在这里扮演「传话员」:解析设计稿,自动生成或更新 Token 与组件代码,并把变更记录成版本——任何一边改了都能追溯,版本管理由此顺畅。
协同的核心目标叫「同源一致」:设计侧的取值与代码侧的取值之差必须为零:
老周看着设计师和施工队对着同一块屏幕改方案,感慨道:以前是两拨人传话,现在是 AI 牵着两头的线,谁动都能看见。这才是开连锁店该有的底气——第一家在哪开,第二家就照抄一份「温度」。
- 设计侧取值 v设计设计师在稿子里定义的 Token 值。
- 代码侧取值 v代码代码仓库中同名 Token 的值。
- 差值 Δv两侧取值相减,代表同步偏差。
- 归零要求偏差必须为 0,才能保证页面与设计稿完全一致。
AI 应用场景
电商大促品牌改版
阶段:AI 辅助设计生成
解决的问题:大促视觉换装传统靠设计师手工出图、开发手工改色,动辄一周且容易漏改。AI 从「年货节·温暖红」这类关键词直接生成语义色板与配套 Token,前端只替换变量即可全站上线。
具体案例:某电商平台春节版重构时,AI 基于「团圆、红火、鎏金」生成红金语义色板,并自动导出明暗两套 Token;视觉回归通过后,全站换装从一周压缩到两小时。
中后台系统深色模式
阶段:AI 驱动的主题配置
解决的问题:深色模式若手工重写所有组件配色,工作量大且对比度难保证。AI 根据浅色 Token 自动推导深色 Token 映射,并逐对校验文字与背景的 WCAG 对比度。
具体案例:某数据中台为监控大屏上线夜间模式,AI 依据浅色主题自动生成深色变体,对比度全部达到 AA 后一键切换,无需改动任何组件代码。
设计稿到代码的 Token 同步
阶段:AI 辅助开发协同
解决的问题:设计改版后开发手工抄参数容易漏改,导致设计与实现偏离。AI 解析设计稿变更,自动更新 Token 仓库并产出差异报告,让「同源一致」常态化。
具体案例:某 SaaS 团队在 Figma 插件与 CI 流水线之间架起 Token 同步桥,设计稿合并即触发 Token 更新,前端 PR 自动带上最新变量,回归问题减少八成。
Python 演示
# 迷你版 AI 设计系统生成器:色板 -> 字阶 -> Token -> 组件 -> 校验class DesignSystemGenerator: def __init__(self, hue=250): self.primary_hue = hue self.palette = {} self.type_scale = [] self.tokens = {} def hsl_to_rgb(self, h, s, l): c = (1 - abs(2 * l - 1)) * s x = c * (1 - abs((h / 60) % 2 - 1)) m = l - c / 2 if h < 60: rgb = (c, x, 0) elif h < 120: rgb = (x, c, 0) elif h < 180: rgb = (0, c, x) elif h < 240: rgb = (0, x, c) elif h < 300: rgb = (x, 0, c) else: rgb = (c, 0, x) return tuple(round((v + m) * 255) for v in rgb) def generate_palette(self, steps=9): # 从亮到暗生成同一色相下的 9 档色阶 for i in range(steps): t = i / (steps - 1) lightness = round(0.95 - t * 0.55, 2) self.palette["brand-%d" % (i + 1)] = (self.primary_hue, 0.82, lightness) return self.palette def generate_type_scale(self, base=14, ratio=1.25, steps=6): # 等比字阶:f_n = f_0 * r^n self.type_scale = [round(base * ratio ** i, 1) for i in range(steps)] return self.type_scale def build_tokens(self): # 把内部色值转成 CSS 可用的 Token 字符串 for name, (h, s, l) in self.palette.items(): self.tokens["color-" + name] = "hsl(%d, %d%%, %d%%)" % (h, s * 100, l * 100) for i, size in enumerate(self.type_scale): self.tokens["font-scale-%d" % (i + 1)] = "%spx" % size return self.tokens def luminance(self, h, s, l): # 线性化 RGB 后按人眼敏感度加权 r, g, b = self.hsl_to_rgb(h, s, l) def linear(v): v = v / 255 return v / 12.92 if v <= 0.03928 else ((v + 0.055) / 1.055) ** 2.4 return 0.2126 * linear(r) + 0.7152 * linear(g) + 0.0722 * linear(b) def contrast_ratio(self, c1, c2): l1 = self.luminance(*c1) + 0.05 l2 = self.luminance(*c2) + 0.05 return round(max(l1, l2) / min(l1, l2), 2) def generate_component(self, name, bg_key, text_key): # 组件不写死颜色,只引用 Token return {"name": name, "background": self.tokens[bg_key], "text": self.tokens[text_key]} if __name__ == "__main__": gen = DesignSystemGenerator(hue=250) # 品牌主色相取靛蓝 palette = gen.generate_palette() scale = gen.generate_type_scale() tokens = gen.build_tokens() print("色阶首末:", palette["brand-1"], palette["brand-9"]) print("字阶:", scale) button = gen.generate_component("button", "color-brand-5", "color-brand-9") print("按钮组件:", button) print("正文对比度:", gen.contrast_ratio((250, 0.82, 0.40), (250, 0.82, 0.95)))
self.palette["brand-%d" % (i + 1)] = (self.primary_hue, 0.82, lightness)固定色相与饱和度,只让明度线性变化,生成成体系的 9 档色阶round(base * ratio ** i, 1)等比字阶公式f_n = f_0 × r^n的直接实现"hsl(%d, %d%%, %d%%)" % (h, s * 100, l * 100)把内部色值格式化成 CSS 可用的 Token 字符串def linear(v)对 RGB 做伽马线性化,还原物理亮度0.2126 * linear(r) + 0.7152 * linear(g) + 0.0722 * linear(b)按人眼敏感度加权求相对亮度max(l1, l2) / min(l1, l2)对比度公式,始终用较亮值除以较暗值generate_component` 返回 `{"background": ..., "text": ...}组件只引用 Token,不写死色值
常见误区
误区我以为做出一套 Button、Card 组件就算搭建设计系统了,剩下就是把组件往页面里堆。组件库就是设计系统本身。
正解组件只是冰山一角,地基是设计 Token 与使用规则。没有 Token,组件里写死的色值会让主题切换和批量改版寸步难行。就像只有漂亮杯子却没有统一的杯口直径,咖啡机永远无法配套——好看是表象,规则才是灵魂。
为何常见:组件最直观、可交付、能截图展示;Token 抽象看不见,自然容易被忽略。
误区AI 生成色板就是随机挑一堆好看的颜色,不满意就再随机一次,本质是碰运气。
正解正确链路是「关键词 → 语义映射 → 色相锚点 → 色阶插值 → 人工复核」。随机只能撞到孤立的好看颜色,语义映射加插值才能保证色板成体系、有层级、可扩展、可命名。
为何常见:用户只看到生成结果,看不到背后的语义映射与插值流程,容易把结果归因于运气。
误区深色模式就是把背景和文字颜色互换,其他什么都不用动,改两个变量就够了。
正解主题是整套 Token 的映射,包含字体、间距、圆角、阴影;深浅模式需要分别维护 Token 值,并重新校验对比度。只换颜色,卡片阴影、边框层级、留白关系全会失真。
为何常见:颜色是最显性的视觉差异,字体间距阴影都是「看不见的细节」,所以最先被忽略。
误区对比度达到 4.5 就是好看,低于 4.5 就是设计失败,我拿它当审美评判器。
正解WCAG 对比度是「可读性」标准而非审美标准,它只衡量看得清看不清;好不好看是另一套评价体系。而且公式基于线性化后的相对亮度,直接拿 0~255 的 RGB 值硬算会得出错误结论。
为何常见:把可访问性指标误当成万能的设计质量指标,是数字产品领域常见的认知错位。
面试题
Q1. 设计系统的核心组成是什么?
- A.页面截图、标注稿与交互原型图
- B.颜色、字体、组件库与设计Token← 正确答案
- C.开发框架、服务器与系统数据库
- D.需求文档、测试用例与发布安排
答案:B。设计系统如同咖啡馆的「整店方案」,核心是颜色、字体、组件库与底层设计 Token;截图、框架、需求文档都只是过程中的素材,不是系统本身。
Q2. 设计Token在系统中的角色是?
- A.直接存储所有用户上传图片
- B.记录前端代码提交的日志
- C.用统一变量管理视觉样式细节← 正确答案
- D.控制服务器负载均衡策略
答案:C。Token 是「施工标准」:把颜色、字号、间距抽成统一变量,任何组件都引用变量而非写死数值;存储图片、记录日志、控制负载都不是它的职责。
Q3. 关键词生成色板时,第一步应该做什么?
- A.随机生成一千个十六进制色
- B.用爬虫抓取竞品网站配色
- C.把关键词做语义映射到色调← 正确答案
- D.把色板结果写入后端库表
答案:C。生成链路的第一步是语义映射——把「温暖、治愈」翻译成色彩语义并锁定色相锚点;随机取色、抓取竞品、写库都是「撞运气」或收尾动作,无法保证色板成体系。
Q4. 等比字阶中,下一级字号如何计算?
- A.用固定比率乘以当前的字号← 正确答案
- B.用当前字号直接加十个像素
- C.每次随机取一个质数即可
- D.四舍五入取浏览器默认像素
答案:A。字阶公式是 f_n = f_0 × r^n,下一级字号等于当前字号乘固定比率。加像素的等差数列不成「台阶感」,随机值与浏览器默认值更是与模块化字阶背道而驰。
Q5. 计算文本对比度时,亮度需要怎样处理?
- A.直接用透明度替代亮度数值
- B.将 RGB 分量线性化后加权← 正确答案
- C.把颜色转成字符串再拼哈希
- D.对全部像素做整数平均
答案:B。WCAG 对比度要求先把 RGB 做伽马线性化,再按人眼敏感度加权得到相对亮度;透明度、字符串哈希、整数平均都算不出可用的对比度。
Q6. 实现主题切换通常依赖哪些机制?
- A.设计 Token 映射为 CSS 变量← 正确答案
- B.深浅模式分别维护 Token 值← 正确答案
- C.运行时对所有图片做滤镜处理
- D.修改服务器返回的 HTML 页面
答案:AB。主题切换的本质是「换一层 Token 映射」:Token 映射成 CSS 变量,深浅两套主题各自维护取值。图片滤镜只能骗过眼睛,改 HTML 更是缘木求鱼。
Q7. 一致性校验常用的自动化手段有哪些?
- A.Token 命名与取值规则检查← 正确答案
- B.视觉回归测试比对截图差异← 正确答案
- C.代码提交前自动格式化缩进
- D.对比度与间距刻度合规检查← 正确答案
答案:ABD。一致性校验覆盖 Token 规则、对比度与间距刻度、视觉回归三个层面;格式化缩进只规范代码风格,与视觉一致性无关。
Q8. 语义色板相比原始色板有哪些优势?
- A.组件引用语义变量而非色值← 正确答案
- B.所有颜色必须保持完全一致
- C.颜色总数被限制到只有五种
- D.改一处变量即可全局生效← 正确答案
答案:AD。语义色板让组件通过「语义变量」引用颜色,改一处变量全站生效;「完全一致」「只有五种」都不是真实约束,色板本身保留丰富刻度供取用。
Q9. 落地 AI 生成设计系统时,最稳妥的做法是?
- A.每页写死颜色值不抽象任何规则
- B.生成后执行对比度与一致性校验← 正确答案
- C.盲目信任 AI 输出不做人工复核
- D.跳过设计 Token 直接改组件源码
答案:B。最稳妥的是「生成→校验→人工复核」闭环:AI 负责生成,对比度与一致性校验把住质量线,人做最终决策;写死色值、盲信 AI、跳过 Token 都会让系统失控。
Q10. 设计开发协同中 Token 同步的价值是什么?
- A.设计稿与代码共用同一套取值← 正确答案
- B.让开发手工抄写全部参数
- C.每次改版都重新设计整个页面
- D.把最终设计文件压缩打包上传
答案:A。Token 同步让设计稿与代码「同源一致」——设计侧改一个变量,代码侧自动更新,杜绝手工抄参数的漏改;重新设计页面与打包上传都与协同无关。