为 IMO 搭建设计系统

职责

设计师

产品

imo

平台

移动端

时间

2021.9

本文会分享下我在工作中搭建设计系统时的一些心得,虽然现在已经有很多插件可以一键生成设计系统,但我认为设计系统对设计师来说就像是基本功,可以不用,但不能不会。

  1. 背景

在 imo 工作的初期,设计和开发都有各自的组件库,但并不互通。这种情况会导致如下问题:

  1. 开发的组件使用率不高,很多情况需要反复造轮子。

  1. 设计以为页面某个部分使用了 “组件”,但实际上是硬编码,改动时需遍历页面,工作非常繁杂。

  1. 开发直接使用设计稿内的切图,导致切图重复,增加了包体大小。对 imo 来说,因为主要服务对象为欠发达地区,包体大小直接影响着产品下载量。

  1. 以上的各种情况导致产品无法支持切换主题,尤其是用户非常期待的深色模式。

切图重复

当时产品内有很多重复的切图,在开发查询后发现,即便是简单的一个箭头,也有很多个版本。

在借助设计改版的契机下,开发同事和设计师都有意愿来解决此问题,在详细讨论后,我们打算建立新的设计系统。并借此实现:

  1. 设计组件和代码组件一一对应。

  1. 后续能够快速切换多个主题。

  1. 能够有方法来避免开发同事使用硬编码。

  1. 颜色定义

为了支持主题切换,最重要的工作就是颜色定义。

首先讲一下如何确定色阶:定义色阶中最大/最小的明度和饱和度,来确定色阶范围,然后将我们的品牌色作为 60,分别向上和向下拓展。

Blue

100

Blue

90

Blue

80

Blue

70

Blue

60

Blue

50

Blue

40

Blue

30

Blue

20

Blue

10

获得基础色阶后,就可以根据此色阶拓展出不同的色相,来满足各个场景的需求。

在选用其他色相时,我们使用了 HCL 色彩空间来作为参考。与传统的 HSL 对比,HCL 更匹配人眼对亮度的感知。

在色板完成后,命名也是非常关键的一步。在过去的 UI KIT 里,一般颜色的命名方式和色相有关,比如刚才提到的品牌色,名字为 Blue - 60 。

这种命名方式对设计师使用时,或产品仅有单一主题时比较简单,修改颜色时只需要更换 Blue - 60 对应的色值即可;

但在切换多主题时会导致一些问题:如下图所示,Blue - 60 为默认主题内的主要按钮颜色,但如果我们需要将主题色换成绿色,这个命名方式就会变得容易让人混淆。

Normal

Button

Blue 60: #009DFF

Muslim

Button

Blue 60: #009E15 ⚠️

为解决此问题,我们同时采用了语意颜色来和开发协作。

同样的一个按钮,当使用语意颜色时,它的命名变为“可点击态的普通按钮颜色”,在不同的色板里,这个语意对应的颜色不同,沟通起来更加清晰。

Semantic Color

Button

Button / Normal / Enble

Button

Normal: #009DFF

Button

Muslim: #009E15

通过此规则,我们和开发配合制作了主题替换工具,目前已经支持一键将设计稿替换为不同的主题。

  1. 组件制作

在设计组件时,我们首先定义了一些基础的设计规范,让设计师内部的产出具有一致性。

除了规范外,我也在制作哪些组件、如何让设计师清晰的选择、以及如何和代码具有唯一对应关系上进行了思考。目前,我们的组件库分为3个大类。

代号 0 为系统组件,这些不属于我们的产品,为系统自己的部分,主要提供给设计师使用,提升效率。如status bar、keyboard等等。

代号 1 为基本控件,这些是组件里不可再分的基本单元。如switch,button、toast 等等,每个基本控件都有其编号。这样开发可通过唯一token对应。

代号 2 为组合控件,这些由基本控件组合而成,对于一些经常用到的组合控件,可以将其制作为控件,提升设计和开发的工作效率。

101 Button

102 Toggle

104 Toast

202 Item

204 Dialog

205 Sheet

在两年后的今天,此架构仍然能满足开发和设计的迭代诉求。

  1. 检查机制

组件做好只是开始,如何保证组件顺利使用是更重要的一环。因为仅凭肉眼无法识别开发是否使用组件,因此我使用了两种方式来解决此问题:

  1. 预防:在组件里通过图层遮盖来避免开发直接查看组件标注,通过此方法开发可优先意识到这部分使用的是组件。

  1. 检查:委托组件的开发同事为组件添加特殊遮照。通过在走查工具内开启此功能,设计可以快速查看界面是否使用组件。

在完成以上步骤后,整个设计组件系统完成闭环。

当然,设计系统是团队内所有设计师共建的结果。我在其中主要的职责是前期规则制定,和部分icon、组件的制作。

后记

在成功搭建好组件库之后,经过项管和开发的统计,整体设计效率和开发效率提升明显,包体大小有效减少。

月均提效

设计侧 3.0 天 / 人

开发侧 2.9 天 / 人

减少包体

累计减少包体大小 816.6 KB

但是成熟的组件系统也有其弊病,因为规范会在一定的程度影响创新。如果一个产品处于快速发展期,建立设计系统可能并不是那么紧要。同时,在实际项目中也要鼓励设计师提出新的想法,要时刻牢记,设计系统更像是「建议」,而并非「准则」。

WANTJUNE

© MADE IN GUANGZHOU