Mermaid在线编辑器:左边写 Mermaid 代码,右边实时出图,写错了告诉你第几行。支持流程图(flowchart/graph,四个方向、十几种节点形状、子图、样式)和时序图(sequenceDiagram)。点模板就能改出请假审批、登录流程、if else 程序流程图;导出 SVG、PNG,复制 Markdown 代码块,一键生成分享链接。流程图制作不用装流程图软件,代码只在本机处理,不上传。
怎么用
这是一个 Mermaid 在线编辑器:左边写 Mermaid 代码,停手 0.3 秒右边自动出图,流程图制作不用拖框、不用对齐。第一次打开时编辑区里是一段「登录流程」示例,改改里面的字就能看到效果;上方五个模板点一下就换:请假审批流程、登录流程(含判断)、if/else 程序流程、购物下单时序图、项目分工子图。代码会自动存成草稿,只存在这个浏览器里,不上传。
一、写第一张流程图
第一行写图的类型和方向,下面每行写一条连线:
flowchart TD
A[开始] --> B{要不要加班?}
B -->|要| C[点外卖]
B -->|不要| D[回家做饭]
flowchart 也可以写成 graph;方向 TD(或 TB)从上到下,BT 从下到上,LR 从左到右,RL 从右到左。节点第一次出现时用括号定形状和文字,后面再提到它只写名字就行。
二、Mermaid 流程图语法速查
下面是最常用的几条;每种写法配现场出图、时序图逐条讲解和常见报错对照,看 Mermaid 语法速查。
节点形状(括号里写显示的文字):
| 写法 | 形状 | 常用来表示 |
|---|---|---|
A[文字] |
方框 | 一个处理步骤 |
A(文字) |
圆角框 | 步骤(比方框柔和) |
A([文字]) |
体育场形(两头圆) | 开始、结束 |
A[[文字]] |
子程序框(两边双竖线) | 调用另一个已定义的流程 |
A[(文字)] |
圆柱 | 数据库、存储 |
A((文字)) |
圆 | 连接点、汇合点 |
A{文字} |
菱形 | 判断(是/否) |
A{{文字}} |
六边形 | 准备、初始化 |
A>文字] |
旗形 | 不太常用,可当标注 |
A[/文字/] |
平行四边形 | 输入、输出 |
A[/文字\] |
梯形 | 不太常用 |
连线:
| 写法 | 效果 |
|---|---|
A --> B |
带箭头的实线 |
A --- B |
不带箭头的实线 |
A -.-> B |
带箭头的虚线 |
A ==> B |
带箭头的粗线 |
A -->|是| B 或 A -- 是 --> B |
线上写字 |
A ---> B |
多一个短横,两端隔得更远 |
A <--> B |
双向箭头 |
A --o B、A --x B |
末端是圆圈、叉 |
A --> B --> C |
链式,一行连好几段 |
A & B --> C |
A 和 B 都连到 C |
其它:subgraph 名字[标题] 和 end 之间的节点会被框在一起,可以嵌套;%% 开头的一行是注释,不画;classDef 名字 fill:#色,stroke:#色,color:#色 定义样式,再用 class 节点 名字 或 节点:::名字 套上,style 节点 fill:#色 单独改一个;文字里要换行写 <br>,要写方括号这类符号就用英文双引号把文字包起来。
三、时序图(sequenceDiagram)
时序图画「谁在什么时候给谁发了什么」:
| 写法 | 效果 |
|---|---|
participant A as 浏览器 |
声明参与者(方框),as 后面是显示名 |
actor U as 用户 |
声明参与者(小人) |
A->>B: 文字 |
实线实心箭头(请求) |
B-->>A: 文字 |
虚线实心箭头(返回) |
A->B、A-->B |
实线、虚线,不带箭头 |
A-xB、A-)B |
末端是叉、开口箭头(异步) |
Note right of A: 文字 |
备注,也可 left of、over A,B |
loop 文字 … end |
循环框 |
alt 文字 … else 文字 … end |
分支框 |
opt 文字 … end |
可选框 |
autonumber |
给每条消息自动编号 |
par/and、critical/option、break、rect 这几种框也能画。
四、导出与分享
- 导出 SVG:矢量图,放大不糊,网页和设计软件都能打开;
- 导出 PNG:2 倍清晰度的图片,白底,直接贴进文档、PPT、聊天;
- 复制 SVG 代码:把图的源码放进剪贴板,贴进网页 HTML 里就是这张图;
- 复制 Markdown 代码块:复制成以三个反引号加 mermaid 开头的代码块,贴进支持 Mermaid 的 Markdown 编辑器里会直接显示成图;
- 复制分享链接:代码压进链接里,对方打开就是同一张图。
预览太大或太小,用「放大」「缩小」,「适应宽度」让整张图正好放进右栏。手机上屏幕窄,顶部切「代码」「图」两个标签。
怎么看结果
出错时看状态行
代码写错时,右边的图不会消失,而是变淡、保留上一次画对的样子;图下方的状态行用一句话告诉你第几行哪里不对,左边行号栏里那一行会标红。最常见的几种:
- 「第一行要写图的类型」:第一行漏了
flowchart TD或sequenceDiagram,或者拼错了。 - 「这里看不懂:连线要写成 –> 一类」:箭头少了一个短横,
A -> B在流程图里不算,要写A --> B(时序图里->是合法的)。 - 「没有配对的」:括号没关上,比如
A[开始少了];或者文字里本身带括号,用英文双引号把文字包起来就行。 - 「多了一个 end」或「没有配对的 end」:
subgraph、loop、alt和end要一一对应。 - 「本页暂只支持流程图与时序图」:甘特图、类图、饼图等其它类型本页不画,如实提示。
流程图各形状的通行含义
流程图的形状有一套大家默认的约定:两头圆的框(([ ]))是开始和结束;方框是一步处理;菱形是判断,从菱形出去的线一般写「是」「否」;平行四边形是输入或输出(比如「输入账号密码」「打印结果」);圆柱是数据库。照着约定画,别人不用看说明就能读懂。
画得好不好看
一张清楚的流程图,主线最好顺着一个方向走(上到下或左到右),判断分支写清楚条件,回头的线(比如「重新输入」)尽量少。步骤超过二三十个时,用 subgraph 把同一阶段的步骤框在一起,或者拆成几张图。如果你要整理的是一个主题的要点、而不是先后步骤,用 思维导图在线制作 更合适。
常见问题
在 GitHub、Typora、Obsidian 里怎么用 Mermaid?
把代码放进以三个反引号加 mermaid 开头、三个反引号结尾的代码块里,就是本页「复制 Markdown 代码块」复制出来的样子。GitHub 的 README 与议题、Typora、Obsidian 等多数支持 Mermaid 的 Markdown 环境会把它直接显示成图;各家用的 Mermaid 版本略有不同,新加的语法个别地方可能不认。在本页先画对,再贴过去最省事。要预览整篇 Markdown 的排版,用 Markdown 在线编辑器。
流程图里能放图片、能随手拖动节点吗?
不能。本页的思路是「写代码出图」,排版全自动,节点位置由程序算;要随手摆放、手绘涂画,用 在线画板。
我有一份 JSON 数据想画成流程图?
Mermaid 不直接读 JSON。可以先用 JSON 在线解析 把数据格式化、看清结构,再按上面的速查表手写成节点和连线。
中文能当节点名吗?
能。登录 --> 首页 这样直接用中文当节点名也认;不过节点名里不能有空格和标点,文字复杂时,建议用英文字母当名字、中文写在括号里,比如 A[用户登录],后面引用时写 A 更短。
原理与冷知识
Mermaid 的来历
Mermaid 是一个开源项目,2014 年前后由开发者 Knut Sveidqvist 发起,初衷是让文档里的图像代码一样好写、好改、好管理,不用每次都打开画图软件重新导出。后来越来越多的平台直接支持在 Markdown 里渲染 Mermaid 代码块,它就成了「文本画图」最常用的写法之一。
本页怎么排版流程图
本页没有用官方渲染库,解析和排版都是自己写的,大致分五步:
- 去环:从第一个节点开始顺着箭头走一遍,指回「上游」的线(比如「重新输入」)在排版时暂时当成反向的线,画的时候再把箭头掉回来。所以图里有环也一定能排完,不会卡住页面。
- 分层:每个节点放在「从起点出发的最长路径」那一层,连线写得越长(
--->),两端隔的层数越多。 - 插虚拟点:跨好几层的线,中间每层插一个看不见的点,让线从节点之间的空当穿过去,不压节点。
- 减少交叉:每一层里的节点按「连着的上一层节点的平均位置」重新排序,上下来回扫十几轮,取线交叉最少的那一次;同一个子图的成员排在一起,方便框起来。
- 定坐标与画线:节点往相连节点的平均位置靠拢,同时保证互不重叠;连线画成圆角折线,拐弯和线上文字都放在两层之间的空当里,空当会按文字的大小自动加宽。
每一步的循环次数都有上限,单元测试里拿 200 个节点、300 条线的随机图核过:在普通电脑上几十毫秒就能排完。
时序图怎么排
时序图简单得多:参与者从左到右按第一次出现的顺序排,两个参与者之间要放下最长的那条消息文字,就把右边的参与者整体往右推;消息从上到下按书写顺序排,每条占一行,循环、分支框按它包住的消息和参与者自动定大小。
更多问答
Mermaid 是什么?为什么用代码画流程图?
Mermaid 是一种用纯文本描述图表的写法,配套一个开源的 JavaScript 渲染库:写一行 A --> B,就画出一个从 A 指向 B 的箭头。用代码画流程图的好处是:不用拖框、对齐、连线,排版全自动;改一个步骤只改一行字;源码是纯文本,能放进 Markdown 文档、代码仓库,和文字一起改、一起看历史。缺点是要记一点语法,本页下面有速查表和五个模板。
和官方的 Mermaid Live Editor(mermaid.live)有什么区别?
mermaid.live 是 Mermaid 项目官方的在线编辑器,用的是官方渲染库,支持全部十几种图表类型和主题配置。本页是自己写的轻量版,只支持最常用的流程图和时序图,好处是全中文界面、出错时用中文告诉你第几行哪里不对、模板都是中文场景,打开就能用。两边的语法是同一套,在本页写好的代码贴到官方编辑器、GitHub 或 Typora 里也能画出来,只是线条走法和间距会有些不同。要画甘特图、类图、饼图,请用官方编辑器。
和 draw.io、ProcessOn、博思白板这些流程图软件比怎么样?
draw.io、ProcessOn、博思白板是拖拽式的画图工具:形状、颜色、位置都能随手摆,适合要求精美排版的海报式流程图,通常也有云端保存和多人协作。本页是「写代码出图」:不能随手拖动单个节点,但改流程快、不用管排版,源码还能直接贴进技术文档。要临时画一张步骤图、写进 README,或者想学 Mermaid 语法,用本页;要做精细的展示图,用拖拽式的流程图软件。
希沃白板能画流程图吗?
希沃白板是给老师上课用的课件和互动教学软件,和专门画流程图的工具不是一回事。课件里要放一张流程图,可以在本页画好后点「导出 PNG」,再把图片插进课件。
分享链接安全吗?代码会上传吗?
不会上传。点「复制分享链接」时,本页把代码压缩编码后放在网址 # 号后面,# 后面的内容浏览器不会发给服务器;对方打开链接,页面在他的浏览器里把代码解出来、画出图。也正因为代码就在链接里,图越复杂链接越长,个别聊天软件可能会截断特别长的链接,这时改发导出的图片更稳妥。
为什么我的图和在别的地方画出来的不完全一样?
本页的解析和排版是自己写的,没有用官方渲染库,所以节点的摆放顺序、线的拐弯位置、间距会和官方不同,但节点、形状、连线、文字是一样的。另外本页暂时不画子图内部单独设置的方向(direction),也不画时序图里的激活条(activate),连到子图本身的线会画成连到子图里的第一个节点。这些写法不会报错,只是按简化的方式画。