Mermaid 图表指南
Mermaid 语法指南:流程图、时序图、类图、状态图、ER 图、甘特图与饼图的完整语法示例,每例均有实时渲染预览,可直接复制到 Markdown 编辑器中使用。
#快速上手
在 Markdown 中使用 Mermaid
Markdown Source
Mermaid 是一种用文本描述生成图表的语法,Markdown 编辑器会把 ```mermaid 代码块渲染成流程图、时序图、甘特图等图表。你只需要写几行文本,无需任何绘图软件。
```mermaid
graph TD
A[写下 Mermaid 代码] --> B[编辑器实时渲染]
B --> C[复制到文档或导出 PDF]
```
编写时注意三点:代码块语言标记必须写成 `mermaid`;每行指令从行首开始(不要混用 Tab 与空格缩进);图表声明(如 `graph TD`)必须是第一行。Rendered Result
第一个流程图:方向与连线
Markdown Source
`graph TD` 声明一个自上而下(Top-Down)的流程图,`graph LR` 则是从左到右(Left-Right)。节点用任意标识符命名,`-->` 表示箭头连线:
```mermaid
graph LR
A[起草] --> B[编辑]
B --> C{满意?}
C -->|是| D[发布]
C -->|否| B
```
把 `TD` 换成 `LR`、`BT`、`RL` 可以得到四个方向的布局。相同标识符的节点只会出现一次,重复写连线即可表达分支与循环。Rendered Result
#流程图(Flowchart)
节点形状
Markdown Source
不同的括号代表不同的节点形状,用于区分普通步骤、判断、起止等:
```mermaid
graph TD
A[矩形:普通步骤]
B(圆角:开始或结束)
C{菱形:判断条件}
D((圆形:连接点))
E([体育场形:流程起止])
F[(圆柱:数据库)]
A --> B --> C
C --> D
C --> E
D --> F
```
如果节点文字里包含括号、引号等特殊字符,用引号包裹文字即可:`A["含(括号)的文字"]`。Rendered Result
连线样式与标签
Markdown Source
连线支持实线、虚线、粗线三种样式,还可以在连线上标注文字:
```mermaid
graph LR
A --> B[实线箭头]
B -.- C[虚线无箭头]
C -.-> D[虚线箭头]
D ==> E[粗线箭头]
E -- 带文字的连线 --> F[目标]
F -->|另一种写法| G[目标]
```
用箭头长度还能控制间距:`--->` 比 `-->` 更长。标签写法 `-- 文字 -->` 与 `-->|文字|` 效果相同,选一种保持全文统一即可。Rendered Result
子图(Subgraph)分组
Markdown Source
`subgraph ... end` 把相关节点圈成一个分组,常用于划分模块或角色,配合连线表达模块间调用:
```mermaid
graph TB
subgraph 前端
P[编辑页面] --> V[实时预览]
end
subgraph 后端静态托管
S[静态资源] --> H[HTML 文档]
end
P --> S
V --> H
```
子图内还可以用 `direction LR` 单独指定这一组的布局方向,例如`subgraph 前端`下一行写`direction LR`。Rendered Result
#时序图(Sequence Diagram)
参与者与消息
Markdown Source
`sequenceDiagram` 声明时序图,`participant` 定义参与者,`->>` 实线箭头表示请求,`-->>` 虚线箭头表示响应。加上 `autonumber` 可以为每条消息自动编号:
```mermaid
sequenceDiagram
autonumber
participant U as 用户
participant E as 编辑器
participant S as 导出服务
U->>E: 点击导出 PDF
E->>S: 提交文档内容
S-->>E: 返回 PDF 文件
E-->>U: 触发浏览器下载
```
参与者按声明顺序从左到右排列;`as` 后面是显示名称,不写则直接显示标识符。Rendered Result
激活与生命周期
Markdown Source
`activate`/`deactivate` 标记参与者的活跃时段(生命线上的矩形),也可以直接在消息末尾用 `+`(激活)和 `-`(结束)简写:
```mermaid
sequenceDiagram
participant U as 用户
participant A as 应用
participant D as 数据库
U->>+A: 请求文档列表
A->>+D: 查询数据
D-->>-A: 返回结果
A-->>-U: 渲染列表
```
`+` 出现在目标参与者一侧,`-` 用于配对结束。配对使用能清楚表达调用栈的进入与退出。Rendered Result
注释与结构块
Markdown Source
`note` 添加注释,`loop`、`alt/else`、`opt`、`par` 等结构块表达循环、分支与并行:
```mermaid
sequenceDiagram
participant U as 用户
participant S as 搜索服务
U->>S: 输入关键词
loop 防抖等待
S->>S: 延迟 300ms 合并请求
end
alt 命中结果
S-->>U: 返回搜索建议
else 无结果
S-->>U: 返回空列表
end
Note over U,S: 交互结束
```
`note left of`、`note right of` 控制注释位置,`note over A,B` 让注释横跨多个参与者。Rendered Result
#类图与状态图
类图(Class Diagram)
Markdown Source
`classDiagram` 描述类、成员与关系。`+`、`-`、`#` 分别表示公有、私有、受保护;`-->` 实线关联、`..>` 虚线依赖、`<|--` 继承、`<|..>` 实现:
```mermaid
classDiagram
class Editor {
+String content
+render() void
+exportTo(format) File
-autoSave() void
}
class Exporter {
+toPDF() File
+toHTML() File
}
class Renderer {
<<interface>>
+render() void
}
Editor --> Exporter : 调用导出
Editor ..> Renderer : 依赖渲染
Renderer <|.. VditorRenderer : 实现
```
关系上的 `:` 后可以写中文说明;`<<interface>>` 这类构造型注解放在成员列表第一行。Rendered Result
状态图(State Diagram)
Markdown Source
`stateDiagram-v2` 描述状态与迁移,`[*]` 表示初始与结束状态,`-->` 上的 `:` 后写触发事件:
```mermaid
stateDiagram-v2
[*] --> 草稿
草稿 --> 审核中 : 提交审核
审核中 --> 已发布 : 审核通过
审核中 --> 草稿 : 驳回修改
已发布 --> [*]
```
复杂状态可以嵌套组合,用 `state 名称 { ... }` 表达子状态机:
```mermaid
stateDiagram-v2
[*] --> 编辑中
state 编辑中 {
[*] --> 输入内容
输入内容 --> 自动保存
自动保存 --> 输入内容
}
编辑中 --> 已保存 : 手动保存
已保存 --> [*]
```
Rendered Result
#ER 图(实体关系图)
实体、属性与关系基数
Markdown Source
`erDiagram` 描述数据库实体关系。实体名建议用英文大写字母与下划线;大括号内逐行列出`类型 属性名 键约束`;关系用 |、o、} 等符号组合表示基数:
```mermaid
erDiagram
USER ||--o{ DOCUMENT : 创建
DOCUMENT ||--|{ TAG : 标注
USER {
string id PK
string name
string email
}
DOCUMENT {
string id PK
string user_id FK
string title
datetime created_at
}
```
基数符号读法:`||` 恰好一个、`o|` 零或一个、`} {` 多个。`||--o{` 表示"一对多(可为零)"。`PK`、`FK` 分别标注主键与外键。Rendered Result
#甘特图与饼图
甘特图(Gantt)
Markdown Source
`gantt` 用日期与工期排计划。`dateFormat` 指定输入日期格式,`axisFormat` 指定横轴显示格式;任务写成`名称 :状态, 编号, 开始, 工期`,用 `after 编号` 串行衔接:
```mermaid
gantt
title 文档改版计划
dateFormat YYYY-MM-DD
axisFormat %m-%d
section 调研
竞品分析 :done, t1, 2026-01-05, 3d
用户访谈 :active, t2, after t1, 4d
section 撰写
初稿 :t3, after t2, 5d
评审与修订 :t4, after t3, 3d
section 上线
发布 :t5, after t4, 1d
crit 灰度验证 :crit, t6, after t5, 2d
```
状态标记:`done` 已完成、`active` 进行中、`crit` 关键路径;同一条任务可以叠加,例如`:done,crit,`。Rendered Result
饼图(Pie)
Markdown Source
`pie` 生成占比饼图,`title` 后写标题,每行一条`"名称" : 数值`:
```mermaid
pie title 站点内容页流量来源
"搜索引擎" : 62
"直接访问" : 23
"外部推荐" : 10
"社交媒体" : 5
```
数值不需要百分比,Mermaid 会按总和自动换算占比。名称务必用英文双引号包裹。Rendered Result
#在编辑器中使用
在 MarkdownAssistant 中实时预览
Markdown Source
把本页任意示例复制到 [MarkdownAssistant 在线编辑器](/zh/) 中,即可在右侧预览里实时看到图表,修改代码的瞬间图表会重新渲染。图表与正文、公式、表格可以自由混排:
```mermaid
graph LR
A[Markdown 文本] --> B{包含图表?}
B -->|是| C[Mermaid 渲染]
B -->|否| D[普通排版]
C --> E[导出 PDF / HTML]
D --> E
```
导出 PDF 时图表会按当前主题完整嵌入;切换深色模式后图表配色会自动跟随。Rendered Result
常见问题与技巧
Markdown Source
**图表不渲染,显示错误面板?** 多数是语法问题:检查图表声明是否在第一行、括号是否配对、行首是否有多余空格。节点文字含 `( ) { } [ ]` 等特殊字符时,用引号包裹:`A["带(括号)的文字"]`。
**想让图表更紧凑或更宽松?** 流程图方向(TD/LR)通常比调整间距更有效;时序图加 `autonumber` 既美观又便于在正文中引用某一步。
**图表太大被压缩?** 渲染结果默认自适应容器宽度,导出或全屏预览可以看到原始尺寸。
```mermaid
graph TD
A["输入 Mermaid 代码"] --> B{"语法正确?"}
B -->|是| C["正常渲染图表"]
B -->|否| D["查看错误提示"]
D --> A
```
Rendered Result