1、Token 在设计工具中的落地
1. Style Token
• Paint Token;
• Typography Token;
• Layer Style Token;
• Dimension Token;
• Transition Token.
Paint Token
其中,gradient token 是一种典型的 composite token,它包含了 color、position 两个 property。
值得一提的是,在实践中,我们也可以将常用的图像填充设为 color style 或 present。
Typography token
• font size;
• font weight;
• letter spacing;
• line height…
在 Figma 和 Sketch 中,均选用 text style 作为 typography token 的载体
Layer Style Token
• Stroke Token;
• Shadow Token;
• Blur Token.
因为 Figma 没有 layer style 的概念,所以在 Figma 中,需通过手动组合 paint、stroke、effect 来生成 layer style。如,Sketch 中用一个 layer style 即可实现的模糊材质图层效果,在 Figma 中需用 paint 和 effect 组合生成:
Dimension Token
Transition Token
• delay;
• cubic bézier (timing function).
Sketch 和 Figma 都暂不支持 transition token 的落地:
• Figma 支持自定义动画,但不支持将其存储为复用样式;
• 在 Sketch 中,设计师只能调用 5 种预设的动画类型,不可自定义具体参数,且不支持将其存储为复用样式。
由此,我们建议设计师使用文档来管理 transition token。以下是我们在实践中的部分案例:
多模式的处理
• 深色模式;
• 高对比度模式;
• 子品牌(sub-brand);
• 特定域(domain,如 public、internal、partner)。
我们建议将不同模式的样式库分为多个文件,且与组件库解耦。这样做的好处是,设计师仅需制作一套模式的设计稿,即可通过一定的手段生成其他各种模式的设计稿。下面是我们探索出的具体做法(以浅色模式生成深色模式为例)。
在 Figma 中,将浅色模式组件库文件调用的浅色模式样式库(fundation)直接 swap 至深色模式样式库,即可生成深色模式组件库。
多业务的处理
总结
2. Component Token
在 Figma 中,property 有 4 种类型。除了最为基础的 variant property,boolean property、instance swap property、text property 都是是用来传达 component 中有哪些部分是可以被修改的(从开发的角度来看,就是表达哪些部分是可以配置的),如:
• Boolean property:用来表示可以显示/隐藏 component 中的哪些图层。其包括 true 和 false 这 2 个 value(也可以是 on 和 off),在 Figma 的面板中表现为一个开关;
• Instance swap property:用来表示可以替换 component 中的哪些 instance;
• Text property:用来表示可以修改 component 中的哪些文本。
Property 和 Value 的命名
• 尽可能使用阿拉伯数字(如「2 Icons」而不是「Two Icons」、「Double Icons」);
• 避免使用实际参数命名(如「2A」而不是「16pt」);
• Boolean property 的命名需使用「Show XX」的格式(如「Show Icon」「Show Title」);
• 强调「仅有某元素」使用「XX Only」的格式(如「Icon Only」「Title Only」);
• 表达「用于某元素之上」使用「On XX」的格式(如「On Dark」「On Light」);
• 表达「相对常规的多出某元素」使用「+ XX」的格式(如「+ Icon」「+ Title」);
• 表达「有多个元素复合而成」使用「XX + XX」的格式(如「Icon + Title」「Title + Description」)。
Property 和 Value 的排序
• 按逻辑关系排(如先放控制尺寸的 property、再放控制颜色的 property)。
对于 value 的排序,主要有以下两种思路:
• 按数值梯度排(如 S、M、L);
• 按使用频次排(如将最常用的 default、pressed 排在前面,很少用的 focused 排在后面)。
Variant Property 转换为 Boolean Property
由此,我们建议,尽可能将 variant property 设置为更简洁的 boolean property,但要在满足以下条件的情况下:
• 只有两个 values;
• 未来不大可能增加更多 values。
如上一个案例中的「Type」property 被转换为如下表述后,就很难清晰理解其含义了:
FormGroup/index.js
<FormGroup>
<Input label="Email Address" type="email" required />
</FormGroup>
Input/index.js
<div id={id} className={classes} {...attributes}>
{label && (
<Label htmlFor={id} {...labelProps}>
{label}
</Label>
)}
{children}
</div>
FormGroup/index.js
<FormGroup>
<Input label="Email Address" type="email" required />
</FormGroup>
Input/index.js
<div id={id} className={classes} {...attributes}>
{label && (
<Label htmlFor={id} {...labelProps}>
{label}
</Label>
)}
{children}
</div>
总结
3. Template Token
Figma 尚不支持 template。
4. File Token
• image(如:用户头像、场景插画等);
• video(如:教育视频等);
• linked data(如:成组的综合类型数据等)。
在 Sketch 中,选用 data 作为 file token 的载体。
其中,text data 存放于 TXT 文件中,如:
北京
上海
广州
深圳
...
[
{
"Photo": "WeStore.jpeg",
"Location": "海珠区艺苑路",
"Title": "微信形象店 WeStore",
},
{
"Photo": "SUPERMONKEY.jpeg",
"Location": "海珠区新港中路",
"Title": "超级猩猩(客村全能店)",
},
{
"Photo": "Guangzhou Restaurant.jpeg",
"Location": "天河区体育东路",
"Title": "广州酒家(体育东路店)",
}
]
2、与开发的协作方式
1. 输出样式库的 Token
Sketch
Color variable 是 Sketch 原生支持输出的唯一类型。可使用 Sketch web app 输出 color variable 的 token 文件,详情请见Using a Color Tokens export from Sketch。若需要输出更多类型,我们建议使用第三方插件Design Token Sketch Plugin。
Figma
Figma 不支持导出 design token 文件,但可使用第三方插件figma Token 导出。
2. 输出组件库、模板库的 Token
其中,component property 文档是将 component「token 化」最为重要的文档。如下是我们使用的文档编排方式:
3. Token 文件的版本管理
[Major].[Minor].[Patch]
更重要的是,我们需要在版本更新时向大家清晰地传达此次更新的具体内容。因此,我们需在合适的位置维护好组件库的更新日志(changelog)。而更新日志也可以结构化如下:
Design Token Documentation Update ([date]):
🎉 What’s New
• ...
• ...
🛠 What’s Modified
• Bug fix for ...
• Thing updated for ...
⚰️ What’s Moved to Graveyard
• ...
• ...
我们于本文给到了许多建议,这些内容兴许能对你帮助,但它们也很有可能并不适合你的团队。所以,可能还需要读者去做进一步的思考及探索。
不过,设计「设计过程」本身也是设计师的工作职责,design token 只是我们实现「更科学高效的设计」的手段之一。
因笔者认知、经验有限,本文难免有误读与疏漏,望读者谅解,并加以批评指正。
• Design Tokens Community Group. (2022, August 31). Design Tokens Format Module.
• Thomas Lowry. (n.d.). Typography systems in Figma.
• Ale Muñoz. (2018, October 2). Do more with Data: Building a Data Supplier plugin for Sketch.
• Lukas Oppermann. (2021, February 5). Building better products with a design token pipeline.
• Nathan Curtis. (2016, June 25). Tokens in Design Systems.
• John Choura. (n.d.). Stack mirroring: Designing for code and coding for design.
• Computer Hope. (2021, February 1). What is a Boolean?
• Facebook Inc. (n.d.). Components and Props –. React — A JavaScript Library for Building User Interfaces.
• Hoffman, C. (2021, August 13). What Is an API, and How Do Developers Use Them? How-To Geek.