前端设计系统建设复盘:Design Token从理念到代码的落地全过程
前端设计系统建设复盘Design Token从理念到代码的落地全过程一、设计的不一致性有多贵某SaaS产品的UI经历2年开发后积累了82种灰色值不同组件用了不同的gray-100、14种主色调变体、7套不同的圆角规则。设计师抱怨开发实现的总是跟设计稿不一样开发抱怨设计规范变了我怎么知道改了哪。目标是建立单一真相来源——它不是口头约定的规范而是代码化的约束任何变更都能自动同步到所有组件。二、从Figma到代码的Token管道第一步在Figma中定义Variables设计师在Figma中集中管理Design Variables——颜色、字体、间距、阴影、圆角。通过Figma Variables插件导出为JSON。第二步Style Dictionary做多平台转换// tokens.json —— 中间格式 { color: { primary: { 500: { value: #4F46E5 }, 600: { value: #4338CA } }, neutral: { 100: { value: #F3F4F6 }, 200: { value: #E5E7EB }, 900: { value: #111827 } } }, spacing: { xs: { value: 4px }, sm: { value: 8px }, md: { value: 16px }, lg: { value: 24px } }, typography: { heading: { xl: { value: { fontFamily: Inter, fontSize: 32px, lineHeight: 40px, fontWeight: 700 } } } } }// build-tokens.js —— Style Dictionary 配置 const StyleDictionary require(style-dictionary); StyleDictionary.extend({ source: [tokens/**/*.json], platforms: { css: { transformGroup: css, buildPath: dist/css/, files: [{ destination: variables.css, format: css/variables, options: { outputReferences: true, }, }], }, js: { transformGroup: js, buildPath: dist/js/, files: [{ destination: tokens.js, format: javascript/es6, }], }, }, }).buildAllPlatforms();输出/* dist/css/variables.css */ :root { --color-primary-500: #4F46E5; --color-primary-600: #4338CA; --color-neutral-100: #F3F4F6; --color-neutral-200: #E5E7EB; --spacing-xs: 4px; --spacing-sm: 8px; --spacing-md: 16px; --typography-heading-xl-font-family: Inter; --typography-heading-xl-font-size: 32px; }// dist/js/tokens.js export const colorPrimary500 #4F46E5; export const spacingMd 16px;第三步组件库100%引用Token!-- Button.vue —— 零硬编码值 -- template button :classbuttonClasses slot / /button /template style scoped .btn { padding: var(--spacing-sm) var(--spacing-md); background: var(--color-primary-500); color: var(--color-neutral-100); border-radius: var(--radius-md); font-family: var(--typography-body-md-font-family); font-size: var(--typography-body-md-font-size); :hover { background: var(--color-primary-600); } } /style三、Token变更的自动化传播流程设计师改Figma Variables → 导出JSON → CI中运行Style Dictionary → 生成新的CSS/JS → 自动创建PR → Review合并 → npm publish新版本组件库# .github/workflows/token-update.yml name: Token Update on: push: paths: [tokens/**/*.json] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - run: npm ci - run: npm run build:tokens - name: Create PR uses: peter-evans/create-pull-requestv6 with: title: Token更新设计规范变更 body: | 自动检测到Token文件的变更。 请确认变更符合设计意图后合并。 branch: token-update四、Token落地的实际挑战挑战一历史组件的迁移。82种灰色值不可能一次性全部Token化。采取增量迁移——新组件用Token老组件逐步改造。每次改老组件时将其硬编码值替换为Token引用。6个月内老组件Token覆盖率从0%升至85%。挑战二Token的命名共识。设计团队和开发团队对命名有分歧。设计师习惯用Primary/Secondary开发者习惯用蓝色/灰色。最终采用了设计团队主导的语义化命名如color-primary-500——因为命名面向的是视觉意图而非颜色值。挑战三暗色模式的Token设计。不是if dark then #000 else #FFF——而是定义语义Token如color-surface、color-text-primary每套主题各自赋值:root { --color-surface: #FFFFFF; --color-text-primary: #111827; } [data-themedark] { --color-surface: #1F2937; --color-text-primary: #F9FAFB; }五、总结Design Token体系的核心价值设计与开发的单一真相来源。设计师改颜色不需要通知开发者——Token自动同步。多平台一致性。Web、iOS、Android从同一份Token源生成各自的代码——品牌色真正统一。暗色模式/品牌白标等主题切换变得简单——换一套Token值即可代码不变。Token化的代价需要设计师学习Figma Variables开发者学习Style Dictionary配置CI/CD管道的维护。但对于3人以上团队的中大型产品这个投资在6个月内即可收回——从设计师-开发者-测试三方沟通成本中节省出来的时间远超搭建Token体系的时间投入。最大的经验Token不是写一份规范文档让大家遵守而是代码强制约束不遵守就无法编译。硬编码的颜色值被ESLint规则禁止后Token覆盖率从纸面上的100%变成代码检查器验证过的100%。这才是落地的真正含义。

相关新闻

AI 辅助游戏经济系统平衡:代币供需建模、通胀率预测与参数自动化调优

AI 辅助游戏经济系统平衡:代币供需建模、通胀率预测与参数自动化调优

AI 辅助游戏经济系统平衡:代币供需建模、通胀率预测与参数自动化调优 一、引言 GameFi 经济系统的平衡问题是所有链上游戏最头疼的工程挑战。传统游戏可以靠人工调参玩家反馈来迭代平衡,但链上游戏的经济参数一旦部署到合约就成了公开规则——任何参数变…

2026/10/19 5:51:18 阅读更多 →
超小体积数显驱动高亮数显驱动IC内置显示RAM为8x16位VK16D33Q QFN24

超小体积数显驱动高亮数显驱动IC内置显示RAM为8x16位VK16D33Q QFN24

VK16D33Q是一种恒流数码管或点阵LED驱动控制专用芯片,内 部集成有数据锁存器、LED恒流驱动模块等电路。可以通过寄存器配置,调节扫描的位数,从而获得更大的单点驱动电流。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳极,GRID脚接L…

2026/10/15 14:10:39 阅读更多 →
嵌入式低功耗设计:Tiva C系列外设电源控制寄存器PCEPHY深度解析

嵌入式低功耗设计:Tiva C系列外设电源控制寄存器PCEPHY深度解析

1. 项目概述:为什么嵌入式系统需要精细的电源管理? 在嵌入式开发领域,尤其是面向物联网节点、便携式医疗设备、远程传感器等电池供电场景,功耗控制不再是锦上添花,而是决定产品成败的核心指标。我经历过不止一个项目&a…

2026/10/19 12:06:48 阅读更多 →

最新新闻

从URL取参到Cookie操作:前端开发完整指南与踩坑记录

从URL取参到Cookie操作:前端开发完整指南与踩坑记录

老读者可能还记得,我之前在某公司的运营后台系统里做过一次页面重构,其中有个特别不起眼但又绕不开的需求:从前端拿 URL 上携带的参数,顺手把一些状态写进 Cookie。听起来简单,真正动手的时候才发现,这里面…

2026/10/20 2:54:46 阅读更多 →
不复杂的复杂度:Java开发者必备的大O分析指南

不复杂的复杂度:Java开发者必备的大O分析指南

第八篇了。前面我们用了几篇的篇幅,把Java的语法、面向对象、集合框架、I/O、异常这些基础内容过了一遍。今天想插一个看起来不太一样、但实际非常重要的主题——复杂度分析。为什么在这个节点讲它?因为我发现很多人在前面那些内容学完之后,开…

2026/10/20 2:54:46 阅读更多 →
需求分级与优先级管理:产研团队高效协作的落地指南

需求分级与优先级管理:产研团队高效协作的落地指南

周五下午三点,我正在跟团队过下一迭代的排期。会议室的门被推开,某业务线负责人带着一份PPT走进来,说有一位大客户急需一个定制功能,客户已经在催,下周要看到演示,否则可能影响续约。会议室安静了几秒&…

2026/10/20 2:54:46 阅读更多 →
降AI率工具实测:九类工具原理、风险与一套可复用工作流

降AI率工具实测:九类工具原理、风险与一套可复用工作流

开头部分可以这么写:最近不少本科生来找我看论文初稿,十份里有八份开头都是“随着社会的不断发展”,第二段必是“综上所述”。一问才知道,都是让AI先写一版,自己再改,改完一检测,“AI率”飙到百…

2026/10/20 2:54:46 阅读更多 →
Llama 2 提示词完全指南:模板、参数与实战技巧

Llama 2 提示词完全指南:模板、参数与实战技巧

最近几周我一直在折腾基于 Llama 2 的几个实际项目,从本地部署到 API 接入都走了一遍。反复试下来发现一个很多人容易忽略的事实:Llama 2 和 GPT 系列这类闭源模型的对话习惯差异非常大,直接把原来惯用的提示词搬过去,效果会肉眼可…

2026/10/20 2:54:46 阅读更多 →
大模型Skills应用实战:在Trae中把提示词变成可复用工作流

大模型Skills应用实战:在Trae中把提示词变成可复用工作流

这个系列写到第14篇,我聊点真正能提效的东西——大模型Skills应用。之前几篇要么在讲模型能力边界,要么在讲上下文工程,这次把视角落到一个具体场景:在Trae这款AI原生IDE里,怎么把Skill从"听说过"变成"…

2026/10/20 2:53:45 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →