Skip to content

Commit 48e8786

Browse files
authored
Merge pull request #281 from o2team/feat/post-design-tokens
Feat/post design tokens
2 parents 8b0b990 + f0807b1 commit 48e8786

8 files changed

+7946
-13
lines changed

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,8 @@
4444
},
4545
"optionalDependencies": {
4646
"hexo-browsersync": "^0.3.0"
47+
},
48+
"resolutions": {
49+
"hexo-filter-cleanup/favicons/sharp": "0.28.0"
4750
}
4851
}

source/_posts/2021-03-09-hexigua.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ subtitle:
33
cover: https://img13.360buyimg.com/imagetools/jfs/t1/170092/2/11181/158079/6046e8d5Ee8080164/8fb43cf2e98d1255.jpg
44
categories: H5 游戏开发
55
tags:
6-
- Phaser3
7-
- 合成大西瓜
8-
- matter.js
9-
author:
6+
- Phaser3
7+
- 合成大西瓜
8+
- matter.js
9+
author:
1010
nick: 杰
1111
github_name: eijil
1212
date: 2021-03-09 17:58:08

source/_posts/2021-03-25-interrupt-react-fiber.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ subtitle: 带你了解计算机的中断机制(操作系统心脏)是如何
33
cover: https://img11.360buyimg.com/ling/jfs/t1/156416/37/17938/20347/605c38f1E973ec4d6/fe3315b68d397ca6.jpg
44
category: JavaScript
55
tags:
6-
7-
- JavaScript
8-
- React
9-
author:
6+
- JavaScript
7+
- React
8+
author:
109
nick: nobo
1110
github_name: bplok20010
1211
date: 2021-03-25 14:31:27

source/_posts/2021-06-10-first-glimpse-harmonyos.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,8 @@ export default {
199199
>视图层想改变数据层,只能通过绑定事件的方式实现。
200200
201201
#### 4.1.1 数据初始化
202-
hml 中的数据都来自于对应 js 中的 data 对象,因此在初始化页面时,在 data 对象中写入数据,hml 中就可以通过 {{}} 的形式绑定数据。
202+
hml 中的数据都来自于对应 js 中的 data 对象,因此在初始化页面时,在 data 对象中写入数据,hml 中就可以通过 {% raw %}{{}}{% endraw %} 的形式绑定数据。
203+
203204
```javascript
204205
// xxx.js
205206
export default {
@@ -208,10 +209,12 @@ export default {
208209
}
209210
}
210211
```
212+
211213
```html
212214
<!-- xxx.hml -->
213215
<div>{{text}}</div>
214216
```
217+
215218
#### 4.1.2 数据更新
216219
通过为页面元素绑定事件,可以调用方法更新数据,从而触发视图更新数据
217220
``` javascript

source/_posts/2021-07-08-jd618.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ subtitle: 一文揭秘京东大促团队的 618 开发方案
33
cover: https://img14.360buyimg.com/ling/s690x416_jfs/t1/21899/9/15553/706372/60deeedcE57f65b6a/780a25595fc506af.png
44
categories: 凹凸
55
tags:
6-
7-
- 凹凸
8-
author:
6+
- 凹凸
7+
author:
98
nick: wangli,lijiazhan,huanglvming
109
date: 2021-07-08 17:00:00
1110

source/_posts/2021-07-19-DecisionTree-And-EnsembleLearing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ tags:
55
- 人工智能
66
- AI
77
categories: 人工智能
8-
author: hyde
8+
author:
99
nick: hyde
1010
github_name: hydchow
1111
date: 2021-07-19 09:34:11
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
---
2+
title: 探索 Design Token
3+
subtitle: 智能代码解决了视觉还原工作整体的效能问题,但具体怎么让设计系统完美衔接研发工作流,降低设计研发协作成本,提升最终产出代码的可维护度,正是 DesignToken 可以发挥作用的地方。
4+
cover: https://img30.360buyimg.com/ling/jfs/t1/133291/2/20517/1039000/61c822ccE26c11ccb/176c34be606c6620.png
5+
category: 设计系统
6+
tags:
7+
- 设计系统
8+
- DesignToken
9+
author:
10+
nick: koppt
11+
github_name: koppthe
12+
date: 2021-12-27 10:00:00
13+
---
14+
15+
## 前言
16+
17+
近几年中台化业务兴起,各个业务团队为了能快速响应业务需求,提升研发效能,引入「设计系统」来解决模块化和规模化的问题。
18+
19+
回顾一下什么是设计系统,设计系统是由设计语言和模式库构成,在设计原则的指导下,通过统一的协作语言和科学的管理方法组织起来,并创建体验一致的用户界面的系统。
20+
21+
- 设计语言:设计系统的基础,与品牌识别和情感有关,包含颜色、字体、图标等基础设计原子;
22+
- 模式库:一系列由设计原子组成的可复用的组件、模板等;
23+
24+
![](https://img30.360buyimg.com/ling/jfs/t1/212800/36/9224/49515/61c825c3E8767abc5/84414a401b00086b.jpg)
25+
26+
作为「设计系统」执行方的设计师与前端工程师,日常工作分别是在两个差异化较大的工作流中进行的。常规流程是设计师在设计工具(Sketch、Figma)中完成页面设计后,前端再参照绘制好的原型稿和标注稿,在代码环境中还原视觉稿 UI/UX。但在这个过程中时常会遇到以下问题:
27+
28+
1. 前端如何高效的获取上游设计的更新?
29+
2. 视觉稿中可复用的设计系统原子,如何准确地传达给下游?
30+
3. 视觉还原工作还能提效吗?
31+
32+
33+
#### 前端如何高效的获取上游设计的更新?
34+
设想这么一个场景,在产研交付的过程中,设计师在视觉稿中做的每次修改,都希望能快速响应到最终的产品中,尽可能做到敏捷。而实际工作中,设计上游变更后会告知前端(存在少数变更不告知的情况),前端再打开包含标注信息的设计工具和代码编辑工具完成需求修改。在这个场景中,设计师会通过口头或文字罗列视觉变更点,存在一定的沟通成本和信息丢失问题。在最终产品交付上线前,还会经过一轮「设计走查」环节(敏捷开发中经常忽略的一环),可能又会产生新的设计上游变更,如此反复。
35+
36+
#### 视觉稿中可复用的设计系统原子,如何传达给下游?
37+
一个成熟的项目,往往会有自己的设计系统,设计原子作为系统中可复用程度较高的模块,已深度整合到设计工作流中。但由于设计和前端领域的概念不互通,导致可复用的信息不能有效传达。虽然设计师会整理包含字号层级,品牌色板,卡片阴影等信息的设计规范文件,但这些信息往往不能在视觉交付稿中很好的展现。要理解视觉稿中的设计原子,前端需要了解设计工具中的概念,如 Sketch 的图层样式、Symbols,Figma 的 Variants 等等。设计师是最了解页面样式复用逻辑的,但真正实现页面样式的却是前端工程师,这不可避免产生视觉还原误差。
38+
39+
#### 视觉还原工作还能提效吗?
40+
设计师在绘制好页面视觉稿后,前端需要将视觉稿还原成可交互的页面,按古早的分工,这里需要三种角色参与,分别是视觉设计师、页面重构工程师(负责 HTML + CSS 等 UI/UX 逻辑)和前端工程师(负责数据渲染等逻辑)。本质上,视觉还原就是将设计工具中的视觉稿描述转换为 Web 能理解的数据描述,即 HTML + CSS。而这一块的信息转换工作正是团队近一年来尝试攻克的点,团队立项的「**Deco 智能代码项目**」通过设计工具插件从视觉稿原始信息中提取结构化的数据描述(D2C Schema),然后结合规则系统、计算机视觉、智能布局、深度学习等技术对 D2C Schema 进行处理,转换为布局合理且语义化的 D2C Schema JSON 数据,最后再借助 DSL 解析器转换为多端代码。
41+
42+
智能代码解决了视觉还原工作整体的效能问题,但具体怎么让设计系统完美衔接研发工作流,降低设计研发协作成本,提升最终产出代码的可维护度,正是 DesignToken 可以发挥作用的地方。
43+
44+
## 什么是 Design Token?
45+
46+
`Design Token` 是一种以平台无关的方式来表达设计决策的方法,以便在不同领域、工具和技术之间共享。在设计系统中的, `Design Token` 代表了构成视觉风格的,可复用的设计属性,例如颜色、间距、字体大小等等。 `Token` 被赋予一个特定的名称(`color.brand`),该名称对应于某个设计决策定义的值(`#3271FE`)。
47+
48+
但有别于设计变量(Design Variables), `Design Token` 是一个具有平台无关性的抽象层,该抽象层的命名约定为设计属性创建了一种通用语言,可支持跨应用,跨平台,跨框架使用。
49+
50+
使用 `Design Token` 的工作流程图如下所示:
51+
52+
![](https://img14.360buyimg.com/ling/jfs/t1/204557/9/20014/198267/61c82643E1c534f3d/759ea38129c41604.jpg)
53+
54+
55+
### Design Token 相关术语
56+
57+
按照 W3C Design Token 兴趣组最新拟定的草案,里面提到以下术语:
58+
59+
#### 1. 令牌(Token)
60+
`Token` 关联的信息,至少是一个键值对,如:
61+
62+
![](https://img10.360buyimg.com/ling/jfs/t1/139284/13/24866/92343/61c82b7cE1fc20b8a/2e9e37a4f9ab54cb.jpg)
63+
64+
```css
65+
color-text-primary: #000000;
66+
font-size-heading-level-1: 44px;
67+
```
68+
69+
#### 2. 设计工具(Design Tool)
70+
Figma, Sketch, AdobeXD 等。
71+
72+
#### 3. 翻译工具(Translation Tool)
73+
翻译工具是将 Design Token 从一种格式转换为另一种格式的工具,如:JSON to CSS
74+
- [Theo](https://github.com/salesforce-ux/theo), Salesforce
75+
- [Style Dictionary](https://amzn.github.io/style-dictionary/#/), by Amazon
76+
- [Diez](https://diez.org/), by Haiku
77+
- [Specify](https://specifyapp.com/)
78+
79+
#### 4. 分类(Type)
80+
应用于 Token 的预定义分类,如设计系统中的样式属性分类:
81+
- Color
82+
- Size
83+
- Typeface
84+
- Border Style
85+
86+
示例如下:
87+
```json
88+
{
89+
"color": {
90+
"acid green": {
91+
"value": "#00ff66"
92+
},
93+
"hot pink": {
94+
"value": "#dd22cc"
95+
}
96+
},
97+
"typeface": {
98+
"primary": {
99+
"value": "Comic Sans MS"
100+
},
101+
"secondary": {
102+
"value": "Times New Roman"
103+
}
104+
}
105+
}
106+
```
107+
108+
#### 5. 集合(Groups)
109+
指代特定类别的 Tokens 集合,例如 Brand, Component 等等
110+
111+
```json
112+
{
113+
"brand": {
114+
"color": {
115+
"acid green": {
116+
"value": "#00ff66"
117+
},
118+
"hot pink": {
119+
"value": "#dd22cc"
120+
}
121+
},
122+
"typeface": {
123+
"primary": {
124+
"value": "Comic Sans MS"
125+
},
126+
"secondary": {
127+
"value": "Times New Roman"
128+
}
129+
}
130+
}
131+
}
132+
```
133+
134+
通过 `Style Dictionary` 翻译工具,可将上述标记文件转换为以下 Sass 变量:
135+
136+
```scss
137+
$brand-color-acid-green: #00ff66;
138+
$brand-color-hot-pink: #dd22cc;
139+
$brand-typeface-primary: 'Comic Sans MS';
140+
$brand-typeface-secondary: 'Times New Roman';
141+
```
142+
143+
#### 6. 别名 / 引用(Alias / References)
144+
Token 可以是别的 Tokens 的别名,而不是明确的值,这样带来的好处是:
145+
- 有利于表达设计决策;
146+
- 消除重复的 Token Values;
147+
148+
![](https://img14.360buyimg.com/ling/jfs/t1/210748/21/14031/106946/61c82843Eb006f1ca/cf101c4670b97109.jpg)
149+
150+
#### 7. 复合(Composite)
151+
前面提到,Token 对应的值至少是一个键值对,也可以由多个键值对组成的复合类型。一个典型的例子是 Sketch 设计工具中的文本样式和图层样式:
152+
- 文本样式:由表达文本样式的字体名称、文字粗细、颜色组合;
153+
- 图层样式:由边框样式、颜色、容器背景色和阴影组合;
154+
155+
![](https://img13.360buyimg.com/ling/jfs/t1/216851/3/9233/200088/61c8287eE803b01b1/0199290440299e55.jpg)
156+
157+
## Design Token 的优势
158+
`Design Token` 作为设计规范在工程化中的承接方式,为设计系统的迭代、维护和落地提供了很大的帮助。另外 Design Token 在设计师和工程师之间起到了协议规范的作用,而 Token 正是这套协议中的编码语言。
159+
160+
- **单一事实来源**:设计和研发双方如果严格按协议内容使用进行设计和编码,是能够让设计系统拥有单一的事实来源,即最终的产品视觉呈现以上游设计师输出的 Token 为准。同时也提供了一种用于记录和跟踪设计决策变更的存储库,也就是说上游设计师的视觉变更是可追溯的。
161+
- **产品一致性**:当使用 Tokens 进行设计和实现时,样式变更可以更快地在整个产品套件中得到一致化的更新。
162+
- **上下文驱动**:由于 Tokens 是可复用,可自由组合的,因此它们可以根据上下文和主题进行局部范围内的更新。例如页面背景色可根据系统主题进行颜色取值,如下图:
163+
164+
![](https://img30.360buyimg.com/ling/jfs/t1/218245/29/9165/558676/61c82955E9ca49cf6/3471de5e26508ae9.jpg)
165+
166+
## Design Token 实践
167+
在「Deco 智能代码」项目中,研发可以给项目关联特定的设计系统(DSM),如「京东 APP 设计系统」,其中包含文本样式,图层样式,调色板等设计原子。Deco 在做布局样式还原时,会优先使用设计系统中已有的 Design Tokens 并进行替换,并会标记设计系统中暂未录入的设计变量,例如不在设计规范中的色值,字体大小等。
168+
169+
Design Token 的引入除了可以给布局还原的代码做样式精简外,还能为视觉走查提供便利。因为 D2C(DesignToCode)的技术方案中,产出的代码视觉还原度可以达到将近 100%,设计师可以更多地关注自身视觉稿的设计系统覆盖度,借助上述流程中被标记的「设计变量」列表,可以十分方便的确认设计误差,例如设计规范中规定的背景色为 `$brand-color-bg: F7F7F7`,但代码还原后的背景色未被替换为 `$brand-color-bg`,而是 `#F6F6F6`
170+
171+
## 总结
172+
Design Token 作为一种比较新型的设计决策表达方案,目前主流的设计工具如 Figma、Sketch、AdobeXD 已支持给设计属性做变量标记或引用共享值,再借助第三方的翻译工具如 Theo,将 Tokens 转换为开发人员直接使用的特定平台的代码。
173+
174+
虽说 Design Token 应用的并不广泛,但随着公司业务的扩张,必定会需要一套完善的设计系统,以一致的设计语言和视觉风格,帮助用户形成连续、统一的体验认知。到时候,Design Token 作为设计系统落地的承接方式,定会得到更广泛的使用。Figma 将前端工程化的思想(如:Variants)带入设计领域,我们未尝不能继续探索 Design Token 的可能性呢。
175+
176+
## 参考资料
177+
178+
- [DTCG Glossary](https://www.designtokens.org/glossary/)
179+
- [Material Design Tokens](https://m3.material.io/foundations/design-tokens/overview)
180+
- [Building better products with a design token pipeline](https://uxdesign.cc/building-better-products-with-the-design-token-pipeline-faa86aa068e8)
181+
- [A guide to design tokens](https://www.invisionapp.com/inside-design/design-tokens/)
182+
- [现代 Web 开发困局](https://mp.weixin.qq.com/s/PjpA4CBoC3Q0-gT5f5qlPg)

0 commit comments

Comments
 (0)