我最近一直在听到很多关于设计 Token 的消息,虽然我从来没有在需要它们的项目中工作过,但我认为它们非常有趣,值得记下一些笔记。据我了解,一般思路是:设计 Token 是一种与平台无关的方式来存储变量,例如排版、颜色和间距,这样您的设计系统就可以在 iOS、Android 和普通网站等多个平台上共享。
设计 Token 正在设计系统社区中逐渐流行起来,但它们并不是一个全新的概念。2016 年,Jina Anne 和 Jon Levine 做了一次很棒的演讲,他们谈到了 Salesforce 的 Lightning Design System 如何使用设计 Token。他们描述了我们所处世界的复杂性,在这个世界中,一个构建多个 Web 应用程序和原生应用程序的组织需要在外观和感觉上保持一致,同时又不会减缓开发团队的速度。Jina 还制作了 关于设计 Token 的深入视频课程,并在该课程的预览中写道
使用设计 Token,您可以捕获低级值,然后使用它们来创建产品或应用程序的样式。您可以为 UI 开发维护一个可扩展且一致的视觉系统。
让我们举一个简单的例子:您可能有一个排版比例尺,希望它在多个平台上保持一致。与其将该比例尺的值存储在 CSS 文件中并在每个应用程序或网站中复制它们,不如将它们存储在一个 JSON 文件中,然后将其转换为所有其他平台所需的代码。类似于
{
"global": {
"type": "token",
"category": "typography"
},
"aliases": {
"TYPE_SIZE_SM": {
"value": "14px"
},
"TYPE_SIZE_MD": {
"value": "25px"
},
"TYPE_SIZE_LG": {
"value": "44px"
}
},
您可以编写自己的代码来获取此 JSON 文件并将其转换为您可能需要的全部变量,例如,Sass 文件将依赖于这些 Token,并可能将它们作为变量使用,这些变量将在 Web 应用程序中的其他地方使用。Style Dictionary 是一个可以为我们完成许多繁重工作的工具,它是亚马逊的 Style Dictionary,以下是该工具在实践中的示例
我认为这太棒了。而且我可以看出它如何节省大量重复代码,并避免多个团队之间的混淆,因为它充当单一事实来源,而不是拥有多个具有相同设计要求且需要维护自己的样式表的代码库。Cristiano Rastelli 也在一段时间前写了关于 使用 Style Dictionary 管理设计 Token 的文章,并深入介绍了如何开始使用。
您的事实来源甚至不必是 JSON 文件!在今年早些时候的一篇文章中,Pavel Laptev 向我们展示了如何制作这些 Figma 中的设计 Token,并通过使用他们的 API,从设计模型中抽象出这些值并在代码库中使用它们。
Pavel 将他的 Figma 文档分成不同的页面,分别用于他的网格、间距、调色板和排版,如下所示

现在,这似乎需要付出很多努力来设置,但我认为,像 Sketch 和 Figma 这样的工具只会使将来这类事情变得更容易——它们可能希望事实来源位于其特定的设计工具中,而不是其他工具中。
最后我想提到的就是 Brent Jackson 的这篇文章,他在文章中写了一些关于设计系统 互操作性 的想法。具体来说,他认为应该有一个设计 Token 规范,这样任何 CSS-in-JS 库都可以以任何格式或样式使用该代码
设计系统 Token 旨在灵活且跨平台工作,这意味着不同的团队、不同的实现和不同的库将以不同的方式命名事物。这就是这个规范的用武之地。如果我们都例如将我们的调色板命名为
colors
,并将我们使用的字体大小命名为fontSizes
,就可以实现很多互操作性。您在此基础上做些什么以及您使用什么数据格式来存储这些值,都由您决定。将 JSON 转换为 ES 模块、YAML 甚至 TOML 非常简单,如果您喜欢的话。它也只是一个数据结构,因此在其他数据结构(例如设计工具或 GraphQL API)之间转换也是可能的。此标准也不会试图解决如何命名颜色本身的极其复杂问题。
Brent 接着创建了一个 主题规范 来解决这个问题。看起来,如果我们想从一个 CSS-in-JS 库切换到另一个库,或者如果我们想切换到我们尚未想象过的其他系统,拥有一个用于编写所有变量和设置的单一标准将对我们有所帮助。
总之,我相信设计 Token 才刚刚开始成为主流,随着这些工具、工作流程和标准随着时间的推移而改进,它们的普及率将会上升——所有这些都令人兴奋不已!
这种方法有什么优势,而不是使用一个单独的 .scss 文件包含 CSS 代码,并将该文件作为您使用的 SASS 的标准部分来维护?
因为 JSON 或 YAML 文件与特定语言无关,如果您的系统需要支持 Web 和原生平台。您可以自动执行流程来构建 SCSS/iOS/Android 变量。SalesForce 还构建了 Theo 来完成此操作:https://github.com/salesforce-ux/theo
Sass 无法扩展到原生 iOS 或 Android。这种方法可以扩展到这些平台以及您需要的任何其他平台。
那么,如果有一天 sass 不复存在了呢?据我了解,您在单独的文件中拥有全局样式信息,该文件可以在 sass 不可用时被其他地方使用?这是一个很酷的想法,但它只是文本文件海洋中需要管理的另一个文件,正如作者所说,您可能需要使用某种脚本自动化或其他东西来管理它。
这是我第一次通过文字了解设计 Token 的实际用途。感谢您,Robin!
在多年来,设计模式和品牌一致性被不太友好的开发团队控制后,大约两年前,我偶然发现了使用设计 Token 的想法。从那时起,我一直将设计 Token 集成到我的所有项目中,对于设计师和设计系统维护人员来说,它是一个改变游戏规则的东西。
设计 Token 为设计师提供了一种方式,让他们能够完全控制设计系统中的值。您的 Token 是您保持设计系统值与组织中每个其他项目同步的单一事实来源。
我最初使用的是 salesforce 的 theo,但很快就发现它很复杂、不灵活,而且说实话,它太过复杂了。关于设计 Token 的文章有很多,但几乎没有关于如何在项目中实际实现它们的信息,这使得采用这种工作流程变得困难——而实际上它非常简单。查看我在项目中使用的基本设计 Token 工作流程:https://github.com/MindSculpt/design-tokens
根据您所使用的应用程序来引入设计 Token,您可以使用不同的 gulp 任务来输出您需要的格式(JSON、CSS、YAML、SCSS 等),以满足您当前和将来的任何用例。
最黑暗的时间线理论...
这些 Token 可以被锁定在付费墙、防火墙或以某种方式加密吗?我立刻想到的是,它们可以作为公司和品牌的对复制保护。锁定品牌颜色、字体甚至布局方案。
我记得 90 年代末和 21 世纪初,每个人都在复制苹果的气泡按钮,甚至复制他们网站的 stark-lined 风格。你会看到一些看起来很糟糕的模仿网站,但它们具有模仿该网站和操作系统的这些元素。我可以看出这些 Token 如何在未来用于挑战这类模仿者。如果您的网站或应用程序包含一个“受保护”的设计元素,并且它没有从已知资源库中提取,那么这可能就是您“窃取”这些知识产权的证据。
但另一方面,也可以建立开源设计和元素的资源库,这将使分析型开发人员与视觉设计师相匹配。
这个概念很有趣,我可以看出这些 Token 的价值所在。
我个人认为这个概念似乎过于复杂,为了“保持简单”而付出了太多努力。我喜欢 Figma 存储真实版本的想法,因为它做得很好,而且任何人都可以轻松上手并使用,但将 JSON 和 css 结合使用听起来非常严格,那么可维护性如何呢?也许对于大型团队来说,这样做有意义,因为我知道一些企业员工痴迷于“像素完美”,但我并不相信这是一种好的设计师工作方式,因为它会对不同应用程序的结果设定不切实际的期望。
此外,为多个平台设置一组特定的字体大小似乎是个糟糕的主意,而且是一个奇怪的例子来代表这个概念。理论上,保持一致听起来很实际,但实际上,这些大小应该允许根据设计所基于的上下文进行改变。例如,平板电脑屏幕、高清屏幕、手机都会影响我们对 14px 字体的感知。
我认为开发人员和公司喜欢使用绝对值,这就是为什么设计系统/令牌/任何其他流行语会吸引这么多人。但我作为一名设计师和开发人员的 2 分钱是,我个人更喜欢使用实际的 css,而不是它的抽象,我们应该更多地信任开发人员,开发人员也应该更多地信任自己做出正确的决定。我认为好的前端开发人员应该了解设计。如果你是从事网页设计的工作,反之亦然。
但实际上这不是设计令牌的工作方式,Jaclyn。令牌的妙处在于它们也是可扩展的,你可以在需要时设置不同的外形尺寸上下文。对于许多人来说,你说的没错,这可能比他们需要的要费力。但对于一些公司来说,比如 Salesforce(它们起源于这里),这种复杂性对于扩展到他们的需求至关重要。