1. 从一张草图到一套系统:diagram-design 到底在解决什么问题
第一次听到 “diagram-design” 这个词,很多人会下意识觉得它只是“画图”的另一种说法。但真正在项目里被图表折磨过的人知道,画图本身从来不是最痛的部分。最痛的是:图画完了,需求变了;图改完了,风格不统一;风格统一了,换个人接手又得从头再来。diagram-design 要处理的,正是这一连串“画完之后”的问题。
我把它理解成一套面向图表的设计系统,而不是一个单纯的绘图工具。它关心的不只是“这条线怎么连”,而是“这套图用什么栅格、什么字号层级、什么颜色语义、什么间距节奏,才能让十张、五十张、上百张图看起来像同一个团队产出的”。换句话说,它把图表从“一次性手工作品”拉到了“可复用、可维护、可协作的工程资产”这个层面。
这套东西适合谁?如果你只是偶尔画一张流程图发群里,可能用不上这么重的思路。但只要你符合下面任意一条,diagram-design 的价值就会立刻显现:你需要持续产出架构图、流程图、时序图;你的团队里有多个人同时画图;你的图要放进文档、PPT、官网、白皮书里反复复用;你被“这张图和那张图风格不一样”这个问题困扰过。这些场景下,靠手感画图迟早会崩,靠一套设计规则才能稳住。
核心关键词其实就几个:图表设计系统、视觉一致性、栅格与间距、语义化配色、组件化复用、可维护性。这篇文章我会把这套东西拆开讲透,从整体设计思路,到核心细节,再到完整实操流程和踩坑排查,尽量做到你看完就能照着搭一套自己的 diagram-design 规范。下面进入正题。
2. 整体设计与思路拆解:为什么图表也需要一套“设计系统”
2.1 从“画一张图”到“管一套图”的思维转变
大部分人画图的默认心智模型是“完成任务”:领导要一张架构图,我打开工具,拖几个框,连几条线,导出 PNG,交差。这个模型在单张图场景下没问题,但一旦图的数量上去,问题就集中爆发。我见过一个项目,半年内产出了四十多张架构图,结果没有两张的配色是一致的,有的用蓝色表示服务、有的用蓝色表示数据库,新人看图像在解谜。
diagram-design 的第一个核心思路,就是把这个心智模型从“画一张图”切换到“管一套图”。管一套图意味着你要先定义规则,再在规则内创作。这跟前端开发里先定 design token 再写组件的逻辑是一模一样的。你不再问“这个框用什么颜色好看”,而是问“这个框属于哪一类语义,对应哪一套 token”。
这个转变带来的直接好处是决策成本前移且只付一次。定规则的时候确实要花半天甚至一天,但之后每张图的配色、字号、间距都不需要再纠结,直接套用。算一笔账:如果每张图因为纠结样式多花二十分钟,四十张图就是十三个小时,而定义一套规则可能只需要六到八小时,从第三张图开始就是净赚。
2.2 为什么选择“系统化”而不是“模板化”
这里有个容易混淆的点:系统化和模板化不是一回事。模板化是给你一张固定的图,你往里填内容,灵活度极低,遇到稍微不同的结构就废了。系统化是给你一套原子规则(颜色、字号、间距、形状语义),你用这些原子自由组合出任意结构,但组合出来的结果天然保持一致性。
我试过纯模板方案,结论是:模板适合高度重复的场景,比如固定的汇报封面;但图表的结构千变万化,模板根本覆盖不过来。而纯自由方案又会导致风格失控。diagram-design 走的是中间路线——约束原子,放开组合。这跟排版系统里“用有限的字体和栅格排出无限版面”是同一个哲学。
具体来说,系统化方案要定义四类原子:颜色语义、字号层级、间距节奏、形状语义。这四类定好之后,任何一张新图都只是这四类原子的重新排列。你不需要为每种图单独设计,因为规则本身就能推导出所有图的样子。
2.3 方案选型的三个关键取舍
在真正落地 diagram-design 时,有三个取舍必须提前想清楚,否则做到一半会反复推翻自己。
第一个取舍是工具依赖程度。你可以选择完全绑定某个绘图工具(用它自带的设计变量功能),也可以选择工具无关的方案(把规则写成文档,任何工具都手动遵守)。绑定工具的好处是自动化程度高、不容易违反规则;坏处是换工具就重来。工具无关的好处是灵活、可迁移;坏处是靠人自觉,容易走样。我的建议是:团队小、工具统一,就绑定工具;团队大、工具杂,就工具无关加定期审查。
第二个取舍是规则粒度。规则太粗(比如只规定“主色用蓝”),等于没规定;规则太细(比如规定每个框的圆角必须是 6px),维护成本爆炸且限制创造力。合理的粒度是:颜色和字号定到具体值,间距定到一套刻度(如 4/8/12/16/24/32),形状只定语义不定具体尺寸。
第三个取舍是一致性 vs 表达力。过度追求一致会让图变得呆板,所有图长得一模一样反而丢失信息层次。diagram-design 的解法是:结构层严格一致,强调层允许有限变化。比如所有服务框都是同一种基础样式,但你可以用边框粗细或角标来标记“核心服务”,这种变化是被规则允许的,因为它承载了语义。
3. 核心细节解析与实操要点:四类原子怎么定
3.1 颜色语义:让颜色承载信息而不是装饰
颜色是图表里最容易被滥用的元素。很多人选颜色凭喜好,结果红色一会儿表示“错误”一会儿表示“重点”一会儿又只是“我觉得好看”。diagram-design 要求颜色必须语义化,也就是每种颜色对应一个固定含义,全项目通用。
我通常把颜色分成三组。第一组是结构色:背景、边框、文字、连线,这组是中性灰阶,不承载业务语义,只负责把图撑起来。第二组是语义色:成功、警告、错误、信息、中性,这组对应状态,全项目统一,比如绿色永远是“正常/成功”,橙色永远是“警告/待处理”。第三组是分类色:用于区分不同模块或不同层级,通常选 5 到 8 个色相差异明显但明度饱和度接近的颜色,避免某个颜色跳出来抢戏。
实操上,我建议用 HSL 来定义而不是 HEX,因为调整明度和饱和度更直观。比如语义色可以这样定:成功hsl(145, 60%, 42%),警告hsl(38, 90%, 50%),错误hsl(4, 70%, 52%),信息hsl(210, 70%, 50%)。分类色则固定饱和度和明度,只旋转色相,比如hsl(0/45/90/135/180/225/270, 55%, 55%),这样出来的颜色天然协调。
注意:分类色不要超过 8 个。超过 8 个之后人眼很难区分,这时候应该改用形状或标签来区分,而不是继续加颜色。我踩过这个坑,一张图用了 12 种颜色,结果没人能记住哪个颜色对应哪个模块。
3.2 字号层级:用有限的层级建立阅读顺序
图表里的文字层级比正文排版更严格,因为空间有限,层级一多就乱。diagram-design 的做法是只允许四到五个字号层级,每个层级有明确的用途,不允许临时加层级。
我的常用配置是这样的:图标题用 20px 加粗,模块标题用 16px 中粗,节点主文字用 14px 常规,节点辅助文字用 12px 常规且降低透明度,注释文字用 11px。这五级基本能覆盖所有图表场景。关键是层级之间的比例要稳定,我一般用大约 1.15 到 1.25 的倍率,这样视觉上有区分但不突兀。
这里有个容易被忽略的细节:字重和颜色也是层级的一部分。同样 14px 的文字,加粗加黑和常规加灰,视觉权重完全不同。所以定层级时要把字号、字重、颜色三者一起定,而不是只定字号。比如“节点主文字”这一级,完整定义应该是“14px / 常规 / 主文字色”,而不是只写“14px”。
3.3 间距节奏:用一套刻度代替随手拖拽
间距是图表看起来“专业”还是“业余”的分水岭。业余的图,框与框之间的距离全凭手感,有的挤在一起有的空一大片。专业的图,所有间距都来自同一套刻度,视觉节奏统一。
diagram-design 要求定义一套间距刻度,通常基于 4 或 8 的倍数。我常用的是 4 / 8 / 12 / 16 / 24 / 32 / 48 这套。然后规定每种关系用哪个刻度:同一模块内节点间距用 16,模块内边距用 24,模块之间间距用 48,画布边距用 32。这样定好之后,布局时不再问“这里留多少”,而是问“这是什么关系”,答案自动出来。
提示:间距刻度不要定太多档,5 到 7 档足够。档位太多等于没有约束,因为你可以为任何间距找到“合理”的档位。约束的价值恰恰在于它逼你在有限选项里做选择。
3.4 形状语义:让形状本身传递信息
形状在图表里经常被当成纯装饰,其实它可以承载语义。diagram-design 的思路是:不同形状对应不同类别的事物,全项目统一。比如矩形表示服务或组件,圆角矩形表示流程步骤,菱形表示判断,圆柱表示数据存储,平行四边形表示输入输出,圆形表示外部角色或终端。
这样定好之后,读者看图时不需要看文字就能大致判断这个节点是什么类型,阅读效率大幅提升。形状的尺寸则不需要严格统一,因为内容长度不同,但同类形状的圆角半径、边框粗细、填充方式要统一。比如所有服务框都是 6px 圆角、1px 边框、浅色填充。
这里有个实操心得:形状语义一旦定下,就不要轻易增加新形状。每增加一种形状,读者就要多记一条规则。如果确实需要表达新类型,优先考虑用现有形状加角标或加颜色,而不是造新形状。
4. 实操过程与核心环节实现:从零搭一套 diagram-design
4.1 第一步:盘点现有图表,找出共性问题
不要一上来就定规则,先看你现有的图。把团队近半年产出的图表收集起来,做一次“体检”。我通常从四个维度看:颜色是否语义一致、字号层级是否混乱、间距是否随意、形状是否混用。把问题列出来,这些问题就是你定规则时要重点解决的。
比如我之前做的一次盘点,发现最严重的问题是“蓝色被同时用于表示服务、数据库和重点标注”,导致读者完全无法通过颜色判断节点类型。这个问题直接决定了后面颜色语义必须严格分组。盘点这一步花不了两小时,但能让后面的规则有的放矢,避免拍脑袋定规则。
4.2 第二步:定义 token 表并落地成可查文档
盘点完就开始定 token。我建议用一张表格把所有原子规则列清楚,作为团队的唯一参考。表格大致长这样:
| 类别 | 名称 | 值 | 用途 |
|---|---|---|---|
| 颜色 | 主文字 | hsl(220,15%,20%) | 节点主文字 |
| 颜色 | 辅助文字 | hsl(220,10%,45%) | 节点辅助说明 |
| 颜色 | 成功 | hsl(145,60%,42%) | 正常状态 |
| 颜色 | 警告 | hsl(38,90%,50%) | 待处理状态 |
| 颜色 | 错误 | hsl(4,70%,52%) | 异常状态 |
| 字号 | 图标题 | 20px / 700 | 整图标题 |
| 字号 | 模块标题 | 16px / 600 | 模块分组标题 |
| 字号 | 节点主文字 | 14px / 400 | 节点名称 |
| 间距 | 节点间距 | 16px | 同模块内节点 |
| 间距 | 模块间距 | 48px | 模块之间 |
| 形状 | 服务 | 矩形 6px 圆角 | 服务/组件 |
| 形状 | 判断 | 菱形 | 条件分支 |
这张表要放在团队能随时查到的地方,新人入职第一件事就是读这张表。表格不用追求一次完美,先定一版,用起来再迭代。
4.3 第三步:用一张“样板图”验证规则
规则定完,别急着推广,先画一张样板图验证。选一个中等复杂度的真实场景,比如一个包含五六个服务、两三个数据存储、若干调用关系的架构图,完全按 token 表来画。画的过程中你会发现规则里没考虑到的情况,比如“跨模块的连线用什么颜色”“模块标题放在框内还是框外”,这些都要在样板图阶段补进规则。
样板图的价值在于把抽象规则变成具体参照。之后团队画新图时,可以直接说“参照样板图的风格”,比对着文字规则想象要高效得多。我一般会做两三张样板图,覆盖架构图、流程图、时序图三种最常见类型。
4.4 第四步:建立复用组件库
如果工具支持组件或符号功能,把常用节点做成组件。比如“标准服务框”“标准数据库”“标准判断节点”,每个组件已经内置了正确的颜色、字号、圆角、边框。画图时直接拖组件,而不是每次从零画一个框再调样式。这一步能把违反规则的概率降到最低,因为正确的样式已经封装好了。
组件库要配一份命名规范,比如node-service、node-database、node-decision,命名清晰才能被找到。组件库也要定期维护,规则更新时同步更新组件,否则组件和规则脱节,大家又会回到手动调样式的老路。
4.5 第五步:制定审查机制,防止规则腐化
规则定得再好,没人执行等于零。我建议在团队里设一个轻量的审查机制:新图产出后,由一个人快速过一遍,检查颜色语义、字号层级、间距、形状是否符合 token 表。不用吹毛求疵,抓大放小,重点是防止明显的违规。
审查机制的关键是反馈要具体且可操作。不要说“这张图风格不对”,而要说“数据库节点用了蓝色,但蓝色在我们的规则里是服务色,数据库应该用圆柱加中性色”。具体的反馈才能让人下次改对。审查频率可以随团队熟练度递减,前期每张都看,后期抽查即可。
5. 常见问题与排查技巧实录
5.1 规则太严导致画图变慢怎么办
这是最常见的抱怨。刚推行 diagram-design 时,很多人觉得“以前十分钟画完的图现在要半小时”。这个感受是真实的,但要看清楚原因:慢不是因为规则本身,而是因为你还不熟悉规则。就像刚学键盘打字比手写慢,但熟练后效率是手写的数倍。
排查思路:如果慢是因为频繁查 token 表,说明规则还没内化,多画几张就快了;如果慢是因为规则确实覆盖不了某些场景,说明规则需要补充,把新场景的解法加进 token 表;如果慢是因为规则本身太细,比如规定了每个框的具体像素尺寸,那就该放宽粒度。我的经验是,度过前两周的适应期后,画图速度会反超自由画法,因为不再需要纠结样式。
5.2 不同工具之间规则无法同步怎么办
团队里有人用工具 A 有人用工具 B,规则怎么统一?答案是规则层统一,实现层各自适配。token 表是工具无关的,颜色值、字号、间距这些数值在任何工具里都能手动设置。工具自带的样式功能只是加速器,不是规则本身。
实操上,我会为每个常用工具写一份“token 映射说明”,告诉使用该工具的人怎么把 token 值填进工具的样式设置里。比如工具 A 的“主题色”填哪个值,工具 B 的“文本样式”怎么建。这样规则只有一份,但每个工具都有落地路径。
5.3 历史遗留图表要不要返工
不要。返工历史图表是典型的投入产出比极低的事。历史图表的使命已经完成,除非它还要被反复引用,否则不值得花时间重画。正确的做法是新图新规则,旧图不动,同时把最常被引用的那几张旧图优先重画。判断标准很简单:这张图未来半年还会被打开几次?超过三次就值得重画,否则放着。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 图看起来乱但说不出哪乱 | 间距不统一 | 检查是否所有间距来自同一套刻度 |
| 读者误解节点类型 | 形状语义混用 | 核对形状是否严格对应类别 |
| 重点不突出 | 颜色语义滥用 | 检查是否所有颜色都有明确语义 |
| 文字层级不清 | 字号层级过多 | 收敛到四到五级,检查字重和颜色 |
| 换人接手风格突变 | 规则未文档化 | 补全 token 表并做样板图 |
| 组件和规则不一致 | 组件库未同步 | 规则更新时同步更新组件库 |
5.5 几个踩坑之后才明白的经验
第一个经验:规则要少而硬,不要多而软。我一开始定了三十多条规则,结果没人记得住,执行率极低。后来砍到十二条核心规则,反而执行得好。规则的价值在于被记住和被遵守,不在于全面。
第二个经验:先解决颜色和间距,再解决其他。这两项对视觉一致性的贡献最大,投入产出比最高。字号和形状可以稍后完善。我见过团队一上来就纠结圆角半径,结果最影响观感的颜色问题没解决,白费功夫。
第三个经验:让规则可见。把 token 表做成一张图贴在团队空间里,比藏在文档深处有效得多。人不会主动去查文档,但会看墙上的图。这个小小的改变能让规则遵守率明显提升。
第四个经验:定期回顾规则本身。规则不是定完就一劳永逸的,业务在变,图表类型在变,规则也要跟着迭代。我一般每季度花半小时回顾一次,看看有没有规则已经过时,有没有新场景需要补充。这个习惯能让 diagram-design 保持生命力,而不是变成一纸空文。
最后再分享一个小技巧:如果你不确定某个新场景该怎么定规则,先看它和现有哪个场景最接近,套用最接近的规则,用一段时间再决定要不要单独定。大部分“新场景”其实都能被现有规则覆盖,真正需要新规则的场景少之又少。急着为新场景造规则,往往会让规则体系越来越臃肿,最后谁也记不住。