1. 从一张草图到一套系统:diagram-design 到底在解决什么问题
第一次听到 diagram-design 这个词,很多人会下意识觉得它只是“画图”的另一种说法。但真正在项目里被图表折磨过的人都知道,画图本身从来不是难点,难的是让图“活”起来——改一个节点,整张图跟着重排;换一套配色,所有元素自动统一;导出十种尺寸,不用手动调一遍。diagram-design 要处理的,正是这套从“画出来”到“设计成体系”的完整链路。
我把它理解成一套图表设计系统,而不是单纯的绘图工具或模板集合。它的核心价值在于把图表的三个层面打通:结构层(节点、连线、层级关系)、视觉层(配色、字体、间距、图标)、输出层(不同尺寸、不同格式、不同场景的适配)。传统做法是每画一张图就重新做一遍这三层决策,而 diagram-design 的思路是先把决策固化成规则,之后所有图都从规则里长出来。
这套东西适合谁?如果你只是偶尔画一张流程图发群里,可能用不上。但如果你处在这些场景里,它的价值会非常明显:技术团队需要维护架构图、时序图、部署图,且这些图会随版本迭代频繁更新;产品团队要输出用户旅程图、状态机、信息架构图,且要求视觉风格统一;设计团队要给多个项目做图表规范,避免每个人画出来的东西像来自不同公司。这些场景的共同点是——图表不是一次性产物,而是需要长期维护的资产。
我见过太多团队在图表上踩的坑:架构图用 PPT 画,改一次版本要手动挪半小时;配色靠感觉调,结果十张图放在一起像拼贴画;导出时发现文字被裁切,又回去逐张调整。这些问题的根源不是工具不好,而是缺少一套“设计先行”的规则。diagram-design 要做的,就是把这套规则显性化、可复用、可传承。
接下来的内容,我会从整体设计思路、核心细节、实操流程、常见问题四个维度,把这套方法拆开讲透。不管你现在用的是哪种绘图工具,这套思路都能直接迁移过去。
2. 整体设计思路:为什么先定规则再画图
2.1 图表设计的三个层次与决策顺序
很多人画图的习惯是打开工具就开始拖节点,边画边调样式。这种做法在单张图上没问题,但一旦图的数量超过五张,就会陷入“每张都在重新决策”的泥潭。diagram-design 的核心思路是把决策顺序倒过来:先定视觉规则,再定结构规则,最后才动手画。
具体来说,三个层次的决策顺序应该是这样的:
- 视觉层先行:确定配色体系(主色、辅助色、强调色、中性色)、字体层级(标题、节点文字、注释)、间距基准(8px 或 4px 网格)、圆角与描边规则。这些规则一旦定下来,后面所有图都从中取值,不再单独决策。
- 结构层跟进:确定节点类型(矩形、圆形、菱形等分别代表什么)、连线规则(实线、虚线、箭头方向的含义)、层级表达(通过大小、颜色深浅还是位置来表达层级)。
- 输出层收尾:确定导出尺寸(1x、2x、3x)、格式(SVG、PNG、PDF)、背景色(透明还是白底)、以及不同场景下的变体规则。
这个顺序不能乱。如果先画结构再调视觉,你会发现每次调色都要重新检查所有节点;如果先定输出再定视觉,你会被导出尺寸倒逼着改设计。先定视觉规则,是因为视觉规则是全局的、跨图的;结构规则是局部的、单图的;输出规则是末端的、被动的。
注意:视觉规则不要定得太细。我见过有人把每个节点的圆角都单独定义,结果维护成本比画图还高。规则要覆盖 80% 的常见情况,剩下 20% 允许例外,但例外必须记录在案。
2.2 为什么选择“规则驱动”而不是“模板驱动”
市面上有很多图表模板库,下载下来改改文字就能用。但模板驱动有个致命问题:模板是死的,需求是活的。你下载了一个架构图模板,结果发现你的系统有 12 个服务而不是 6 个,模板的布局直接崩了。你下载了一个流程图模板,结果你的流程有分支和循环,模板的线性结构根本表达不了。
diagram-design 选择规则驱动,是因为规则可以生成无限多的模板,而模板只能覆盖有限的情况。规则驱动的好处体现在三个方面:
- 可扩展:新增一个节点类型,只需要在规则里加一条定义,所有图自动支持。
- 可维护:改一次配色,所有图同步更新,不需要逐张修改。
- 可传承:规则是文档化的,新人接手时看规则就能画出符合规范的图,不需要口传心授。
当然,规则驱动也有代价:前期需要投入时间定义规则,且规则本身需要迭代。但根据我的经验,这个投入在第三张图的时候就能回本。如果你只画一张图,用模板更快;如果你要画十张以上,规则驱动是唯一可持续的方式。
2.3 工具选型:不绑定工具,但要有“规则载体”
diagram-design 不绑定任何特定工具,但需要一个“规则载体”——也就是一个能把规则固化下来的地方。常见的载体有三种:
| 载体类型 | 代表方案 | 适合场景 | 维护成本 |
|---|---|---|---|
| 设计工具变量 | 主流设计工具的样式变量功能 | 设计团队主导,视觉要求高 | 中 |
| 代码化配置 | 用 JSON/YAML 定义主题 | 技术团队主导,需要版本控制 | 低 |
| 文档化规范 | 用文档写清楚规则,人工执行 | 小团队,图数量少 | 高 |
我个人的选择是代码化配置 + 文档化规范的组合。代码化配置负责颜色、字体、间距这些可量化的规则,文档化规范负责“什么时候用虚线”“什么情况加注释”这些需要判断的规则。两者结合,既保证了机器可执行的部分自动化,又保留了人工判断的灵活性。
提示:如果你用的是支持主题变量的绘图工具,优先把规则写进主题变量里。这样改主题就能全局生效,比手动改每个元素高效得多。
3. 核心细节解析:配色、字体、间距、连线四大规则
3.1 配色体系:为什么 5 个颜色就够了
配色是图表设计里最容易失控的部分。很多人一上来就调出十几个颜色,结果图里像打翻了调色盘。diagram-design 的配色规则是:主色 1 个、辅助色 2 个、强调色 1 个、中性色 1 套,总共不超过 5 个色相。
具体定义如下:
- 主色:用于核心节点、主要连线、标题文字。占图面面积的 60% 左右。
- 辅助色 A:用于次级节点、次要连线。占 25% 左右。
- 辅助色 B:用于第三级节点、背景填充。占 10% 左右。
- 强调色:用于需要突出的节点、警告信息、关键路径。占 5% 左右。
- 中性色:用于文字、边框、分割线。包括黑、白、灰三个层级。
这个比例不是随便定的,它参考了经典的 60-30-10 配色法则,并根据图表的特殊性做了调整。图表的信息密度比网页高,所以主色占比要更大,强调色占比要更小,否则满屏都是重点等于没有重点。
配色规则里还有一个容易被忽略的点:颜色要带语义。比如主色代表“正常状态”,强调色代表“异常或重点”,辅助色代表“次要或历史”。这样看图的人不需要看文字,光看颜色就能理解状态。我见过一个团队把配色语义写进了规范:绿色=运行中,黄色=待处理,红色=已阻塞。后来他们所有图都沿用这套语义,跨图理解成本几乎为零。
注意:配色要检查对比度。节点文字和节点背景的对比度至少要达到 4.5:1,否则在投影仪或低亮度屏幕上会看不清。可以用在线对比度检查工具验证,不要凭感觉判断。
3.2 字体层级:三档字号 + 两个字重
字体规则比配色简单,但同样容易出错。常见问题是字号太多(有人用 6 种字号)、字重太乱(粗体斜体下划线混用)。diagram-design 的字体规则是:三档字号 + 两个字重。
- 标题字号:用于图标题、分组标题。通常是节点字号的 1.5 倍。
- 节点字号:用于节点内文字、连线标签。这是基准字号。
- 注释字号:用于补充说明、图例。通常是节点字号的 0.85 倍。
字重只用两个:常规和中等。常规用于正文,中等用于标题和需要强调的节点。不要用粗体,粗体在图表里显得过于沉重;不要用斜体,斜体在小字号下可读性差。
字体族的选择上,我建议用系统默认的无衬线字体。原因有两个:一是跨平台兼容性好,不会出现字体缺失导致的排版错乱;二是无衬线字体在小字号下更清晰,适合图表这种信息密集的场景。如果你有品牌字体要求,确保导出时嵌入字体或转成轮廓。
提示:字号不要用奇数。比如 13px、15px 这种字号在缩放时容易出现半像素渲染,导致文字模糊。用偶数字号(12px、14px、16px)能避免这个问题。
3.3 间距规则:8px 网格为什么是黄金标准
间距是图表设计里最容易被忽视、但对齐感影响最大的因素。diagram-design 的间距规则是:所有间距必须是 8px 的倍数。节点内边距 8px 或 16px,节点间距 24px 或 32px,分组间距 48px 或 64px。
为什么是 8px 而不是 10px 或 5px?因为 8 是 2 的幂次,在缩放时能保持整数。你用 10px 网格,缩放到 1.5 倍就变成 15px,再缩放就出现小数;用 8px 网格,1x、2x、3x 缩放都是整数,永远不会出现半像素。另外,8px 网格和主流设计系统的基准网格一致,迁移成本低。
间距规则里还有一个关键点:间距要表达关系。两个节点靠得近,说明它们关系紧密;两个节点离得远,说明它们属于不同分组。这个“近”和“远”不是凭感觉,而是用固定的间距值来表达。比如同组节点间距 24px,跨组节点间距 64px,这样看图的人能通过间距直接判断分组关系。
注意:连线不要穿过节点。如果布局时发现连线必须穿过某个节点,说明布局需要调整,而不是把连线画过去。连线穿过节点是图表可读性的头号杀手。
3.4 连线规则:实线、虚线、箭头的语义定义
连线是图表的“语法”,它决定了图怎么被理解。diagram-design 的连线规则定义了四种基本类型:
- 实线箭头:表示主流程、数据流向、调用关系。这是最常用的连线。
- 虚线箭头:表示异步调用、可选路径、历史关系。虚线比实线弱,适合表达非核心关系。
- 实线无箭头:表示关联、包含、组合关系。没有方向性,只表达“在一起”。
- 粗线:表示关键路径、高频调用、核心链路。粗线是强调,不要滥用。
连线规则里最容易出错的是箭头方向。我见过很多图箭头方向混乱,有的从左到右,有的从右到左,有的双向。diagram-design 的规则是:箭头方向统一为从左到右、从上到下。如果确实需要反向,用双向箭头,但双向箭头要少用,因为它增加了理解成本。
连线标签的位置也有规则:标签放在连线的中点,且不要遮挡连线。如果连线是斜的,标签放在连线的上方或右侧。标签文字要简短,超过 6 个字的标签考虑用编号代替,然后在图例里解释。
4. 实操过程:从零搭建一套图表设计系统
4.1 第一步:定义主题变量(附配置示例)
搭建系统的第一步是把配色、字体、间距规则写成可执行的配置。如果你用的工具支持主题变量,直接写进去;如果不支持,用 JSON 或 YAML 文件管理,画图时手动取值。
下面是一个主题配置的示例,用 JSON 格式定义:
{ "color": { "primary": "#2B6CB0", "secondaryA": "#68A2D4", "secondaryB": "#BEE3F8", "accent": "#E53E3E", "neutral": { "text": "#1A202C", "border": "#CBD5E0", "background": "#FFFFFF" } }, "font": { "family": "system-ui, -apple-system, sans-serif", "size": { "title": 24, "node": 16, "annotation": 14 }, "weight": { "regular": 400, "medium": 500 } }, "spacing": { "unit": 8, "nodePadding": 16, "nodeGap": 24, "groupGap": 64 }, "connector": { "strokeWidth": 2, "dashPattern": "6,4", "arrowSize": 8 } }这份配置里,每个值都有明确的用途。color.primary是主色,font.size.node是节点基准字号,spacing.unit是网格基准。画图时所有取值都从这里来,不单独决策。
提示:配置里的颜色值建议用十六进制,不要用 RGB 或 HSL。十六进制在大多数工具里兼容性最好,且便于复制粘贴。
4.2 第二步:建立节点与连线的组件库
有了主题变量,下一步是建立组件库。组件库的作用是让画图变成“拼装”而不是“绘制”。你需要定义的组件包括:
- 基础节点:矩形、圆角矩形、圆形、菱形。每个节点定义好默认的填充色、描边色、文字样式、内边距。
- 复合节点:带图标的节点、带状态标识的节点、带展开箭头的分组节点。
- 连线:实线箭头、虚线箭头、无箭头实线、粗线。每条连线定义好默认的描边宽度、颜色、箭头大小。
- 标注:图例、注释框、编号标签。
组件库建好后,画一张新图的流程就变成了:从组件库拖出节点,改文字,连线,调整位置。样式不需要单独调,因为组件已经带好了样式。
我自己的习惯是给每个组件写一句使用说明,比如“矩形节点用于服务,圆角矩形用于模块,圆形用于外部系统”。这样团队里其他人用组件库时不会用错。
4.3 第三步:制定布局规则与自动排版策略
布局是图表设计里最耗时的部分。手动拖节点不仅慢,而且很难对齐。diagram-design 的布局规则是:能用自动布局就用自动布局,不能用自动布局就按网格手动排。
自动布局适合这些场景:线性流程、树形结构、网格排列。大多数绘图工具都支持自动布局功能,你只需要定义好节点间距和方向,工具会自动排列。自动布局的好处是改节点数量时布局自动调整,不需要手动挪。
手动布局适合这些场景:环形结构、自由拓扑、需要精确控制位置的图。手动布局时一定要开网格吸附,确保所有节点对齐到 8px 网格。我见过有人手动布局时不开网格,结果节点位置差 2px,放大后看起来歪歪扭扭。
注意:自动布局不是万能的。如果自动布局的结果不理想,不要强行用,手动调整往往更快。自动布局适合结构规整的图,自由拓扑的图还是手动排更可控。
4.4 第四步:导出与多场景适配
图画完了,最后一步是导出。导出规则要根据使用场景来定:
| 使用场景 | 推荐格式 | 推荐尺寸 | 背景 |
|---|---|---|---|
| 文档嵌入 | SVG | 原始尺寸 | 透明 |
| 演示文稿 | PNG | 2x | 白色 |
| 打印 | 原始尺寸 | 白色 | |
| 网页展示 | SVG | 原始尺寸 | 透明 |
| 移动端查看 | PNG | 1x | 白色 |
导出时最容易出问题的是文字被裁切。原因是导出尺寸和画布尺寸不一致,或者字体没有嵌入。解决办法是导出前检查画布边界,确保所有元素都在边界内;导出 SVG 时选择“嵌入字体”或“转成轮廓”。
还有一个细节:导出文件名要有版本号。比如architecture-v1.2.png,这样迭代时不会覆盖旧版本,也方便追溯。我见过团队因为文件名混乱,导致用了旧版图做汇报,闹了笑话。
5. 常见问题与排查技巧实录
5.1 图表改版后布局崩了怎么办
这是最常见的问题。你画好了一张图,结果需求变了,要加三个节点。加完之后发现连线交叉、节点重叠、整体布局全乱了。排查思路如下:
- 检查是否用了自动布局:如果用了自动布局,加节点后布局应该自动调整。如果没调整,说明自动布局的容器没包含新节点,把新节点拖进容器即可。
- 检查节点间距是否一致:手动布局时,新加的节点可能没有对齐到网格。用对齐工具把所有节点重新对齐到 8px 网格。
- 检查连线是否重新路由:加节点后,原有连线可能需要重新路由。大多数工具支持自动路由,如果自动路由结果不理想,手动调整关键连线。
预防这个问题的办法是:布局时留出扩展空间。比如你预计未来可能加节点,就在布局时多留一些间距,这样加节点时不需要大改。
5.2 配色在不同屏幕上显示不一致
这个问题很隐蔽。你在自己屏幕上调好的配色,到别人屏幕上看起来偏色。原因是不同屏幕的色域和亮度不同。解决办法有两个:
- 用标准色值:不要用“看起来差不多”的颜色,用标准色值。比如主色用
#2B6CB0,不要用“深蓝”这种模糊描述。 - 检查对比度:用在线对比度检查工具验证文字和背景的对比度,确保在低亮度屏幕上也能看清。
如果条件允许,在导出前用不同设备预览一下。我自己的习惯是在手机、笔记本、投影仪上各看一遍,确保配色在三种设备上都不出问题。
5.3 连线交叉太多怎么优化
连线交叉是图表可读性的大敌。交叉太多,看图的人会迷失在连线里。优化思路如下:
- 调整节点位置:把关联紧密的节点放在一起,减少跨图连线。这是最有效的办法。
- 用分组框:把相关节点放进分组框,组内连线用细线,组间连线用粗线。这样连线层次分明。
- 用编号代替连线:如果两个节点距离太远,连线必然交叉,可以用编号代替。比如节点 A 标
1,节点 B 标1,看图的人知道它们是一对。
提示:连线交叉不要超过 3 处。超过 3 处说明布局需要重新设计,而不是继续优化连线。
5.4 团队协作时风格不统一
团队协作时,每个人画出来的图风格不一致,这是最头疼的问题。解决办法是把规则固化到工具里:
- 共享组件库:把组件库放在团队共享位置,所有人从同一个库拖组件。
- 共享主题配置:把主题配置文件放在版本控制里,改配置时所有人同步更新。
- 定期审查:每隔一段时间审查团队产出的图,发现不符合规范的及时纠正。
我见过一个团队用“图表规范文档 + 共享组件库 + 每月审查”的组合,半年后团队产出的图风格高度统一,跨图理解成本几乎为零。
5.5 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决技巧 |
|---|---|---|---|
| 文字被裁切 | 画布边界太小 | 检查画布边界 | 扩大画布或缩小字号 |
| 连线穿过节点 | 布局不合理 | 检查节点位置 | 调整布局或重新路由 |
| 配色偏色 | 色域不一致 | 换设备预览 | 用标准色值 |
| 导出模糊 | 尺寸太小 | 检查导出尺寸 | 用 2x 或 3x 导出 |
| 字体缺失 | 字体未嵌入 | 检查导出设置 | 嵌入字体或转轮廓 |
| 布局错乱 | 未对齐网格 | 检查节点位置 | 重新对齐到 8px 网格 |
6. 我踩过的坑与实操心得
6.1 不要一开始就追求完美规则
我刚开始搭这套系统时,花了整整一周定义规则,结果发现很多规则在实际画图时根本用不上。后来我调整了策略:先用最小规则集画三张图,然后根据实际遇到的问题补充规则。这样规则是“长”出来的,不是“想”出来的,实用性高得多。
最小规则集只需要包含:主色、辅助色、节点字号、节点间距、实线箭头。这五条规则能覆盖 80% 的常见场景。剩下的规则等遇到问题时再加。
6.2 规则要写下来,不要留在脑子里
我见过很多团队,规则都在资深成员的脑子里,新人来了靠“传帮带”。这种模式的问题是:资深成员一走,规则就失传了;新人理解有偏差,画出来的图就不对。解决办法很简单:把规则写成文档,放在团队共享位置。文档不需要多正式,一个 Markdown 文件就够了,关键是要写清楚“什么情况用什么规则”。
6.3 定期回顾和迭代规则
规则不是一成不变的。业务变了,规则也要跟着变。我自己的习惯是每季度回顾一次规则,看看哪些规则用不上了,哪些场景缺少规则。回顾时重点看两个指标:规则覆盖率(多少图完全符合规则)和规则例外率(多少图需要破例)。如果例外率超过 20%,说明规则需要调整。
6.4 工具是次要的,思路是主要的
最后说一个我反复强调的观点:diagram-design 的核心不是工具,而是思路。你用 Figma、Draw.io、Mermaid 还是手绘,都不影响这套思路的落地。关键是先定规则再画图,把决策前置,把重复劳动自动化。工具只是规则的载体,思路才是系统的灵魂。
我见过有人用最简陋的工具画出了最规范的图,也见过有人用最先进的工具画出了最混乱的图。差别不在工具,在于有没有一套清晰的规则和坚持执行规则的习惯。这套 diagram-design 的方法,本质上就是把这种习惯系统化、可传承化。你不需要一次做到完美,从最小规则集开始,画三张图,补一次规则,慢慢就成型了。