Design Tokens 应用记录

什么是 Design Tokens ?

Design Tokens 是指在设计系统中使用的可重复使用的属性和值。它们通常用于定义颜色、字体、间距、边框等设计元素的属性和值。

Design Tokens 提供了一种在设计系统中组织和管理样式的方法。它们可以通过集中的样式文件或使用专门的 Design Token 工具来进行管理。使用 Design Tokens 可以提高样式的可维护性和可扩展性,使设计系统的样式更加一致,并且可以方便地进行主题切换。

举个例子,对于颜色,可以使用 Design Tokens 来定义各种颜色的属性和值,如主色、文字颜色、背景色等。当需要修改某个颜色时,只需要修改 Design Tokens 中的对应属性和值,就可以自动应用到整个系统的样式中,避免了逐个修改样式的麻烦。

Design Tokens 的优势在于它们的可重复使用性和一致性,帮助设计师和开发人员更好地协作,提高工作效率,并且可以轻松地进行样式的扩展和调整。

在编写样式代码时,项目存在的可优化的空间

公司内不少的前端项目使用开源或自研的组件库进行二次开发。在对于样式的管理上,其实已经抽象出如间距、字体大小、颜色、动画等的一些常量值,但这些抽象出来的常量值的管理通常如下原因导致往往难以达到理想的效果:

  • UI 设计师的 UI 迭代未考虑当前版本或上一版本 UI 定下的设计规范来进行设计;

  • UI 设计师使用的 UI 协作设计工具(比如 Figma、蓝湖、MasterGo)及相关插件有过变更,存在隐性的信息丢失情况及增加前端开发的学习成本等问题;

  • 部分前端开发工程师出于如下若干原因,在新开发的功能模块内,未使用抽象出来的样式常量:

    1. 文档缺失
    2. 部门内信息沟通不畅
    3. 无代码评审机制
    4. 需要自己在脑海里将基于 UI 协作设计工具自动生成的样式代码,转换为项目里抽象后的常量值

一个理想的应用 Design Tokens 的工作流及注意事项

UI 设计师

  1. 先进行梯度的色版、间距、文字大小的设计,给出其定义的具体的基础常量值及其命名
  2. 使用语义化的方式(就是前端开发工程师容易识别出是在哪个组件或者说是在哪种场景下使用)重新定义这些常量值(就是 Design Tokens 了),再在这些常量值的基础上设计出各类基础组件及复合组件
  3. 在事先协商好的 UI 协作设计工具上使用自有功能或第三方插件将基础常量值及 Design Tokens 的清单(可以是 css、json 等文件,取决于前端开发工程师所需的文件格式)进行导出,并发送给前端开发工程师
  4. 如需进行设计上的变动,需要进行相关的基础常量值及 Design Tokens 的变更,再重新导出一份清单发送给前端开发工程师
  5. UI 协作设计工具的自动生成的样式代码,需基于定义的 Design Tokens ,便于前端开发工程师进行复制粘贴

前端开发工程师

  1. 在项目中全局引用这份清单文件
  2. 在开发的过程中,可以使用 UI 协作设计工具的自动生成的样式代码
  3. 如需进行设计上的变动,换一份 UI 设计师设计并导出的新的清单文件即可

例子

梯度色版清单

css 复制代码
--Colorpalette-Blue-blue-50: #EBF6FE;
--Colorpalette-Blue-blue-100: #C2E2FC;
--Colorpalette-Blue-blue-200: #A4D4FA;
--Colorpalette-Blue-blue-300: #7BC0F8;
--Colorpalette-Blue-blue-400: #61B4F6;
--Colorpalette-Blue-blue-500: #39A1F4;
--Colorpalette-Blue-blue-600: #3593DE;
--Colorpalette-Blue-blue-700: #2A71AD;
--Colorpalette-Blue-blue-800: #215986;
--Colorpalette-Blue-blue-900: #184466;
--Colorpalette-Brand-brand-50: #EBF4FE;
--Colorpalette-Brand-brand-100: #C0DCFC;
--Colorpalette-Brand-brand-200: #A1CBFB;
--Colorpalette-Brand-brand-300: #76B3F9;
--Colorpalette-Brand-brand-400: #5BA5F8;
--Colorpalette-Brand-brand-500: #328EF6;
--Colorpalette-Brand-brand-600: #2E81E0;
--Colorpalette-Brand-brand-700: #2465AF;
--Colorpalette-Brand-brand-800: #1D4E87;
--Colorpalette-Brand-brand-900: #153C67;
--Colorpalette-Green-green-50: #E6F8ED;
--Colorpalette-Green-green-100: #B0E9C7;
--Colorpalette-Green-green-200: #8ADEAB;
--Colorpalette-Green-green-300: #54CF85;
--Colorpalette-Green-green-400: #33C66D;
--Colorpalette-Green-green-500: #02B849;
--Colorpalette-Green-green-600: #01A741;
--Colorpalette-Green-green-700: #008334;
--Colorpalette-Green-green-800: #006528;
--Colorpalette-Green-green-900: #024D1F;
--Colorpalette-Grey-grey-50: #FAFAFA;
--Colorpalette-Grey-grey-100: #F0EFEF;
--Colorpalette-Grey-grey-200: #E7E8E8;
--Colorpalette-Grey-grey-300: #DCDDDE;
--Colorpalette-Grey-grey-400: #D5D6D7;
--Colorpalette-Grey-grey-500: #CBCCCD;
--Colorpalette-Grey-grey-600: #B9BABB;
--Colorpalette-Grey-grey-700: #909192;
--Colorpalette-Grey-grey-800: #707071;
--Colorpalette-Grey-grey-900: #555656;
--Colorpalette-Red-red-50: #FFECEC;
--Colorpalette-Red-red-100: #FFC4C5;
--Colorpalette-Red-red-200: #FFA9A9;
--Colorpalette-Red-red-300: #FF8282;
--Colorpalette-Red-red-400: #FF6969;
--Colorpalette-Red-red-500: #FF4344;
--Colorpalette-Red-red-600: #E83E3F;
--Colorpalette-Red-red-700: #B53130;
--Colorpalette-Red-red-800: #8C2425;
--Colorpalette-Red-red-900: #6B1D1D;
--Colorpalette-Yellow-yellow-50: #FFF8E9;
--Colorpalette-Yellow-yellow-100: #FEE9BB;
--Colorpalette-Yellow-yellow-200: #FEDE9B;
--Colorpalette-Yellow-yellow-300: #FDCF6C;
--Colorpalette-Yellow-yellow-400: #FDC651;
--Colorpalette-Yellow-yellow-500: #FCB825;
--Colorpalette-Yellow-yellow-600: #E5A722;
--Colorpalette-Yellow-yellow-700: #B3831B;
--Colorpalette-Yellow-yellow-800: #8B6515;
--Colorpalette-Yellow-yellow-900: #6A4E10;
--Colorpalette-black: #000000;
--Colorpalette-font-font-50: #E9E9E9;
--Colorpalette-font-font-100: #BABABB;
--Colorpalette-font-font-200: #98999A;
--Colorpalette-font-font-300: #6A6A6C;
--Colorpalette-font-font-400: #4D4E50;
--Colorpalette-font-font-500: #202123;
--Colorpalette-white: #FFFFFF;

Design Tokens 清单

css 复制代码
--Designtoken-background-color-bg-1: var(--Colorpalette-white);
--Designtoken-background-color-bg-2: var(--Colorpalette-Grey-grey-50);
--Designtoken-background-color-bg-3: var(--Colorpalette-Grey-grey-100);
--Designtoken-background-color-bg-4: var(--Colorpalette-Brand-brand-500);
--Designtoken-background-color-bg-disable: var(--Colorpalette-Grey-grey-100);
--Designtoken-background-color-bg-label-1: var(--Colorpalette-Blue-blue-50);
--Designtoken-background-color-bg-scroll: var(--Colorpalette-Grey-grey-600);
--Designtoken-background-color-erro: var(--Colorpalette-Red-red-500);
--Designtoken-background-color-info: var(--Colorpalette-Blue-blue-500);
--Designtoken-background-color-sucess-label: var(--Colorpalette-Green-green-50);
--Designtoken-background-color-sucess: var(--Colorpalette-Green-green-500);
--Designtoken-background-color-warning: var(--Colorpalette-Yellow-yellow-500);
--Designtoken-button-color-button-bg-primary-default: var(--Colorpalette-Brand-brand-500);
--Designtoken-button-color-button-bg-primary-disable: var(--Colorpalette-Brand-brand-200);
--Designtoken-button-color-button-bg-primary-hover: var(--Colorpalette-Brand-brand-400);
--Designtoken-button-color-button-bg-primary-selected: var(--Colorpalette-Brand-brand-600);
--Designtoken-button-color-dangerbutton-default: var(--Colorpalette-Red-red-500);
--Designtoken-button-color-dangerbutton-hover: var(--Colorpalette-Red-red-400);
--Designtoken-button-color-dangerbutton-selected: var(--Colorpalette-Red-red-600);
--Designtoken-button-color-datebutton-bg-selected: var(--Colorpalette-Brand-brand-50);
--Designtoken-button-color-linebutton-bg-disable: var(--Colorpalette-Grey-grey-50);
--Designtoken-button-color-linebutton-default: var(--Colorpalette-Grey-grey-400);
--Designtoken-button-color-linebutton-hover: var(--Colorpalette-Brand-brand-400);
--Designtoken-button-color-linebutton-selected: var(--Colorpalette-Brand-brand-600);
--Designtoken-button-color-textbutton-bg-hover: var(--Colorpalette-Grey-grey-50);
--Designtoken-button-color-textbutton-bg-selected: var(--Colorpalette-Grey-grey-100);
--Designtoken-icon-color-icon-1: var(--Colorpalette-Brand-brand-500);
--Designtoken-icon-color-icon-2: var(--Colorpalette-font-font-400);
--Designtoken-icon-color-icon-3: var(--Colorpalette-Grey-grey-700);
--Designtoken-icon-color-icon-4: var(--Colorpalette-white);
--Designtoken-icon-color-icon-disable: var(--Colorpalette-Grey-grey-300);
--Designtoken-line-color-alert-info: var(--Colorpalette-Brand-brand-300);
--Designtoken-line-color-alert-success: var(--Colorpalette-Green-green-300);
--Designtoken-line-color-erro: var(--Colorpalette-Red-red-500);
--Designtoken-line-color-input-line-default: var(--Colorpalette-Grey-grey-400);
--Designtoken-line-color-input-line-hover: var(--Colorpalette-Brand-brand-500);
--Designtoken-line-color-line-1: var(--Colorpalette-Grey-grey-100);
--Designtoken-line-color-line-dividing-1: var(--Colorpalette-Grey-grey-50);
--Designtoken-line-color-line-dividing-2: var(--Colorpalette-Grey-grey-100);
--Designtoken-line-color-success: var(--Colorpalette-Green-green-500);
--Designtoken-text-color-text-1: var(--Colorpalette-font-font-500);
--Designtoken-text-color-text-2: var(--Colorpalette-font-font-400);
--Designtoken-text-color-text-3: var(--Colorpalette-font-font-300);
--Designtoken-text-color-text-4: var(--Colorpalette-font-font-200);
--Designtoken-text-color-text-5: var(--Colorpalette-font-font-100);
--Designtoken-text-color-text-6: var(--Colorpalette-Brand-brand-500);
--Designtoken-text-color-text-7: var(--Colorpalette-white);
--Designtoken-text-color-text-err: var(--Colorpalette-Red-red-500)

Figma 上看到的自动生成的代码

然后前端开发工程师直接复制粘贴即可

仍然存在的问题

  • 在公司其中一个项目中进行实际应用时,在导出清单时,使用的是 Figma 上的第三方插件,未知其它平台是否较好的支持该工作流方式
  • 在已有项目上进行替代,成本较高,更建议在新项目中进行使用
相关推荐
顾平安1 小时前
Promise/A+ 规范 - 中文版本
前端
聚名网1 小时前
域名和服务器是什么?域名和服务器是什么关系?
服务器·前端
桃园码工1 小时前
4-Gin HTML 模板渲染 --[Gin 框架入门精讲与实战案例]
前端·html·gin·模板渲染
沈剑心1 小时前
如何在鸿蒙系统上实现「沉浸式」页面?
前端·harmonyos
一棵开花的树,枝芽无限靠近你1 小时前
【PPTist】组件结构设计、主题切换
前端·笔记·学习·编辑器
m0_748237051 小时前
Chrome 关闭自动添加https
前端·chrome
开心工作室_kaic1 小时前
springboot476基于vue篮球联盟管理系统(论文+源码)_kaic
前端·javascript·vue.js
川石教育2 小时前
Vue前端开发-缓存优化
前端·javascript·vue.js·缓存·前端框架·vue·数据缓存
搏博2 小时前
使用Vue创建前后端分离项目的过程(前端部分)
前端·javascript·vue.js
lv程序媛2 小时前
css让按钮放在最右侧
前端·css