Mermaid 图表
Layer 2 专业层标注 :图表按需学习,先掌握基础语法再学绘图。
1. Mermaid 概述#
1.1 什么是 Mermaid#
Mermaid 是一种基于文本的图表描述语言,允许在 Markdown 中使用代码块创建图表。它将图表定义从图形编辑器转移到文本,使图表可以纳入版本控制。
1.2 基本语法#
```mermaid
graph TD
A[开始] --> B{判断}
B -->|是| C[执行]
B -->|否| D[结束]
C --> D
```
1.3 支持的图表类型#
图表类型 关键字 用途 流程图 graph算法流程、业务流程 时序图 sequenceDiagram交互流程、API 调用 甘特图 gantt项目进度、任务排期 类图 classDiagram面向对象设计 状态图 stateDiagram-v2状态机、生命周期 ER 图 erDiagram数据库设计 饼图 pie数据占比 思维导图 mindmap知识结构 Git 图 gitGraph分支策略
2. 流程图#
2.1 方向#
关键字 方向 TB / TD从上到下 BT从下到上 LR从左到右 RL从右到左
2.2 节点形状#
graph LR
A[矩形] --> B(圆角矩形)
B --> C{菱形}
C --> D[(数据库)]
D --> E[[子流程]]
E --> F[(圆柱体)]
F --> G>旗帜]mermaid diagram
语法 形状 用途 [文本]矩形 普通步骤 (文本)圆角矩形 开始/结束 {文本}菱形 判断/条件 [(文本)]圆柱体 数据库 [[文本]]子流程 子过程 ((文本))圆形 连接点
2.3 连接线#
语法 样式 说明 -->实线箭头 默认连接 ---实线无箭头 无方向关联 -.->虚线箭头 可选/条件路径 ==>粗线箭头 强调路径 B -->|文本| C带文字的箭头 连线上标注条件说明
2.4 完整示例#
graph TD
A[用户请求] --> B{已登录?}
B -->|是| C[验证权限]
B -->|否| D[跳转登录]
D --> E[输入凭证]
E --> F{验证通过?}
F -->|是| C
F -->|否| G[显示错误]
G --> E
C --> H{有权限?}
H -->|是| I[返回数据]
H -->|否| J[403 禁止访问]mermaid diagram
3. 时序图#
3.1 基本语法#
数据库 后端 前端 用户 数据库 后端 前端 用户 点击登录 POST /api/login 查询用户 返回用户数据 验证密码 返回 Token 登录成功 数据库 后端 前端 用户 数据库 后端 前端 用户 点击登录 POST /api/login 查询用户 返回用户数据 验证密码 返回 Token 登录成功
sequenceDiagram
participant U as 用户
participant F as 前端
participant B as 后端
participant D as 数据库
U->>F: 点击登录
F->>B: POST /api/login
B->>D: 查询用户
D-->>B: 返回用户数据
B->>B: 验证密码
B-->>F: 返回 Token
F-->>U: 登录成功mermaid diagram
3.2 消息类型#
语法 样式 说明 ->>实线实心箭头 同步请求 -->>虚线实心箭头 返回/响应 ->实线无箭头 单向通知 -)实线开放箭头 异步消息 --)虚线开放箭头 异步响应/回调 -x实线叉箭头 失败/丢失的消息
3.3 高级特性#
DB Server Client DB Server Client HTTP 请求阶段 alt [成功] [失败] GET /api/users 1 SELECT * FROM users 2 返回结果 3 200 OK + 数据 4 500 Error 5 DB Server Client DB Server Client HTTP 请求阶段 alt [成功] [失败] GET /api/users 1 SELECT * FROM users 2 返回结果 3 200 OK + 数据 4 500 Error 5
sequenceDiagram
autonumber
participant Client
participant Server
participant DB
Note over Client,Server: HTTP 请求阶段
Client->>Server: GET /api/users
activate Server
Server->>DB: SELECT * FROM users
activate DB
DB-->>Server: 返回结果
deactivate DB
alt 成功
Server-->>Client: 200 OK + 数据
else 失败
Server-->>Client: 500 Error
end
deactivate Servermermaid diagram
autonumber:自动编号
Note over A,B:跨参与者注释
activate/deactivate:显示激活状态
alt/else:条件分支
loop:循环
opt:可选
4. 甘特图#
4.1 基本语法#
01/04 01/11 01/18 01/25 02/01 02/08 02/15 需求分析 需求评审 前端开发 后端开发 集成测试 性能测试 预发布 正式发布 需求阶段 开发阶段 测试阶段 上线阶段 项目开发计划 01/04 01/11 01/18 01/25 02/01 02/08 02/15 需求分析 需求评审 前端开发 后端开发 集成测试 性能测试 预发布 正式发布 需求阶段 开发阶段 测试阶段 上线阶段 项目开发计划
gantt
title 项目开发计划
dateFormat YYYY-MM-DD
axisFormat %m/%d
section 需求阶段
需求分析 :done, req1, 2026-01-01, 10d
需求评审 :done, req2, after req1, 3d
section 开发阶段
前端开发 :active, dev1, after req2, 20d
后端开发 :active, dev2, after req2, 25d
section 测试阶段
集成测试 :test1, after dev1, 10d
性能测试 :test2, after test1, 5d
section 上线阶段
预发布 :rel1, after test2, 3d
正式发布 :milestone, rel2, after rel1, 0dmermaid diagram
4.2 任务状态#
关键字 样式 说明 done已完成(灰色) 已完成的任务 active进行中(蓝色) 当前执行的任务 (默认) 未开始(浅色) 待执行的任务 milestone里程碑(菱形) 关键节点 crit关键路径(红色) 必须按时完成
5. 类图#
5.1 基本语法#
+addAnimal(Animal a) : void
+findByName(String name) : Animal
+addAnimal(Animal a) : void
+findByName(String name) : Animal
classDiagram
class Animal {
+String name
+int age
+makeSound() void
+move() void
}
class Dog {
+String breed
+fetch() void
+bark() void
}
class Cat {
+String color
+purr() void
}
class Shelter {
-List~Animal~ animals
+addAnimal(Animal a) void
+findByName(String name) Animal
}
Animal <|-- Dog
Animal <|-- Cat
Shelter o-- Animalmermaid diagram
5.2 关系类型#
语法 关系 说明 <|--继承 子类继承父类 *\--组合 强拥有,生命周期一致 o--聚合 弱拥有,可独立存在 -->关联 单向引用 --关联(双向) 双向引用 ..>依赖 使用关系 ..|>实现 接口实现
6. 状态图#
6.1 基本语法#
stateDiagram-v2
[*] --> 待提交
待提交 --> 审核中: 提交申请
审核中 --> 已批准: 审核通过
审核中 --> 已拒绝: 审核拒绝
已拒绝 --> 待提交: 重新提交
已批准 --> 执行中: 开始执行
执行中 --> 已完成: 执行完成
执行中 --> 已取消: 取消执行
已完成 --> [*]
已取消 --> [*]mermaid diagram
6.2 复合状态#
stateDiagram-v2
[*] --> 空闲
state 运行中 {
[*] --> 初始化
初始化 --> 处理中
处理中 --> 等待响应
等待响应 --> 处理中
}
空闲 --> 运行中: 启动
运行中 --> 空闲: 停止mermaid diagram
7. 平台支持#
平台 Mermaid 支持 说明 GitHub 支持 2022 年起原生支持 mermaid 代码块 GitLab 支持 原生支持 Obsidian 支持 原生支持 Typora 支持 原生支持 Hugo 需配置 通过 shortcode 或客户端渲染接入 Jekyll 需插件 需插件 CommonMark 不支持 语言标识只是普通围栏,无渲染行为
8. 调试技巧#