原子设计(Atomic Design)告诉我们,界面的元素都是由文字、颜色等最基本的元素构成的,如颜色、文字、边框框、图标等等。这些基本元素构成组件,进而构成页面。

设计体系(Design system)强调,设计和开发要共享语言,以相同的方法为界面元素命名,为设计模式下定义,并能让设计文件和前端代码使用相同的名称。

那么如何制作并管理繁杂的样式元素,从而保证产品的一致性?salesforce团队早在14年提出并落地了一种设计工作方法:Design Tokens,用以完善设计和开发之间的协作流程。

什么是Design Tokens#

Design tokens are the visual design atoms of the design system — specifically, they are named entities that store visual design attributes.[1]

Design tokens是一种存储视觉设计属性的命名实体。Token直译为“令牌、象征、标志”,参考编程中的赋值功能,可将“Design tokens”翻译为“设计变量”。

举个例子,当设计采用蓝色#508BFF作为主色时,为确保所有使用该蓝色的组件颜色一致性,最好的办法就是创建一个颜色变量$blue,并在需要时调用它。就算后续需要将其改成红色#FF3149时,也只需要修改其对应的token变量值,即可实现全局调整,从而避免出现遗漏代码的情况。

为什么要使用Design tokens#

我们可以从设计、开发、管理三个角度了解Design tokens对工作生产的价值:

  • 共享设计语言:提高设计内部、设计与开发、开发内部的沟通效率。使用token准确表达,而非“浅蓝”“深蓝”“这种蓝色”等模糊字眼。

  • 完善产品设计:促进设计初期对产品视觉元素的把控,减少设计遗漏需要后续增补的情况,避免重复做工。

  • 保持一致性:保持设计和开发的一致性,保持视觉元素的一致性。设计修改后,开发也能及时并高效地做出对应调整。

  • 提高传播性:新入职的开发和设计都能通过design tokens了解产品的视觉元素属性,便于复用和学习。

  • 便于管理:对于一次较大的版本迭代,适用design token易于修改和维护,同时保存上一版本作为历史资料,便于查询。

适合使用Design tokens的场景#

在工作过程中,遇到以下情景时,需要考虑使用Design Tokens:

  • 计划构建一个全新的产品时;
  • 计划重塑现有产品时;
  • 现有产品存在更新迭代快,更新效率低的问题时;
  • 现有产品元素数量多,复用频率高但修改效率低时;
  • 现有产品需要适配多个平台时;

在以下情形中,可以不使用Design Tokens:

  • 暂无计划的新产品时;
  • 现有产品较为完善,未来的变化不大时;

总的来说,类似Design tokens的设计方法只会更加频繁地出现在工作领域中。缺少组织性、管理性的纯粹设计和纯粹编码无法适应越来越快的更新速度,终将会被更高效的方法取代。

Design tokens的对象#

理论上,产品的所有设计元素都可以被归类为token。以下分别是salesforce、Canvas、semi design归纳的token对象类型:

Colors,Background Color,Text Color,Border Color,Font,Font size,Opacity,Line Height,Spacing,Radius,Sizing,Shadow,Time,Touch,Media Query,Z-index.[1]
Color,Depth,Motion,Shape,Space,Type.[2]
基础色、功能色、字体排版、圆角、阴影、尺寸、间距、Z-index、动画。[3]

salesforce现共采用了16种对象,我们在工作过程中,实际创建多少种对象取决于设计体系所采用的元素种类有多少。

也可根据使用的频率和复用情况,判断是否将某个元素作为token。如果某个特殊定制需求的设计元素,不会复用第二次,那就不需要放进设计体系中。

虽然上述描述的基本都是视觉设计元素(绝大多数信息都通过视觉传达),但也不排除其他有特殊目的的产品,例如为视障人士设计的软件,其重点则应该放在触摸、多平台适配、声调、旋律、音量、语速等对象上。

Design tokens的类型#

Global tokens,Alias tokens,Component-specific tokens.[4]

Adobe的Spectrum设计体系将Token细分为三类:全局变量、别名变量、组件变量。

全局变量

作为设计语言的基本值,与上下文内容无关,也无限定的使用范围。所有token都可以调取该变量值,并由其他token继承。

别名变量

与特定的上下文或抽象概念相关,有助于传达token的预期目的,便于开发和设计识别并使用。

组件变量

通过添加组件的名称和属性,便于判断该token的具体用途。对于数量较少的元素,有时也可直接跳过别名变量,直接调用全局变量。

注意事项

  1. 尽量多使用别名变量,而非全局变量
  2. 不可混用别名变量和组件变量

如何应用Design tokens#

0、前提

设计与开发达成共识。不同的公司、团队、产品有不同的定义方式,但都会遵循一定的逻辑和规则。通常情况下,可以由设计提供完整的设计文档,附上相关变量,促进开发同步使用,从而达到共享设计语言的目的。

1、提炼元素

将现有产品的所有设计元素进行拆解,或按照原子设计方法提炼出最小的设计元素,包括所有颜色、字体、字号、形状、轮廓、间距等等。

2、创建Tokens

按照一定规则,对全局变量进行命名。使用token列表帮助检查和完善内容。

Token列表

使用列表的形式罗列产品涉及到的design tokens,有助于设计和开发人员查询并使用。常见的token列表内容包括变量名称、变量值、用途、示例。

变量名称 变量值 用途 示例
1 1 1 1

3、实际应用

根据建立的token,调整现有的设计原型。交付给开发,督促建立对应的元素样式库。

4、维护

保持产品相同的元素使用了相同的token,需要时常检查和剔除多余的变量。同时,对于新增的token也需要仔细斟酌。

参考链接

下一篇:blog