流程图
Markdown 支持通过 Mermaid 语法创建各种类型的图表和流程图,为文档提供可视化表达能力。
Mermaid 简介
Mermaid 是一个基于文本的图表生成工具,支持多种图表类型:
- 流程图 (Flowchart)
- 序列图 (Sequence Diagram)
- 甘特图 (Gantt Chart)
- 类图 (Class Diagram)
- 状态图 (State Diagram)
- 饼图 (Pie Chart)
- 用户旅程图 (User Journey)
- Git图 (Git Graph)
基本语法
流程图 (Flowchart)
markdown
```mermaid
flowchart TD
A[开始] --> B{是否登录?}
B -->|是| C[显示主页]
B -->|否| D[显示登录页]
C --> E[结束]
D --> F[用户登录]
F --> G{登录成功?}
G -->|是| C
G -->|否| H[显示错误信息]
H --> D
**渲染效果**:
```mermaid
flowchart TD
A[开始] --> B{是否登录?}
B -->|是| C[显示主页]
B -->|否| D[显示登录页]
C --> E[结束]
D --> F[用户登录]
F --> G{登录成功?}
G -->|是| C
G -->|否| H[显示错误信息]
H --> D
序列图 (Sequence Diagram)
markdown
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant 后端
participant 数据库
用户->>前端: 登录请求
前端->>后端: 验证用户信息
后端->>数据库: 查询用户数据
数据库-->>后端: 返回用户信息
后端-->>前端: 验证结果
前端-->>用户: 登录响应
**渲染效果**:
```mermaid
sequenceDiagram
participant 用户
participant 前端
participant 后端
participant 数据库
用户->>前端: 登录请求
前端->>后端: 验证用户信息
后端->>数据库: 查询用户数据
数据库-->>后端: 返回用户信息
后端-->>前端: 验证结果
前端-->>用户: 登录响应
流程图详解
节点类型
markdown
```mermaid
flowchart LR
A[方形节点]
B(圆角节点)
C((圆形节点))
D{菱形节点}
E[[子程序]]
F[(数据库)]
G>标签节点]
**渲染效果**:
```mermaid
flowchart LR
A[方形节点]
B(圆角节点)
C((圆形节点))
D{菱形节点}
E[[子程序]]
F[(数据库)]
G>标签节点]
连接线类型
markdown
```mermaid
flowchart TD
A --> B
C --- D
E -.-> F
G ==> H
I --o J
K --x L
**渲染效果**:
```mermaid
flowchart TD
A --> B
C --- D
E -.-> F
G ==> H
I --o J
K --x L
方向控制
markdown
<!-- 从上到下 -->
```mermaid
flowchart TD
A --> B
mermaid
flowchart BT
A --> B
mermaid
flowchart LR
A --> B
mermaid
flowchart RL
A --> B
### 复杂流程图示例
```markdown
```mermaid
flowchart TD
Start([项目开始]) --> Analysis[需求分析]
Analysis --> Design[系统设计]
Design --> Dev{开发阶段}
Dev --> Frontend[前端开发]
Dev --> Backend[后端开发]
Dev --> Database[数据库设计]
Frontend --> FrontTest[前端测试]
Backend --> BackTest[后端测试]
Database --> DataTest[数据测试]
FrontTest --> Integration[集成测试]
BackTest --> Integration
DataTest --> Integration
Integration --> Deploy{部署准备}
Deploy -->|通过| Production[生产环境]
Deploy -->|失败| Bug[修复问题]
Bug --> Integration
Production --> Monitor[监控运维]
Monitor --> End([项目完成])
style Start fill:#e1f5fe
style End fill:#e8f5e8
style Bug fill:#ffebee
**渲染效果**:
```mermaid
flowchart TD
Start([项目开始]) --> Analysis[需求分析]
Analysis --> Design[系统设计]
Design --> Dev{开发阶段}
Dev --> Frontend[前端开发]
Dev --> Backend[后端开发]
Dev --> Database[数据库设计]
Frontend --> FrontTest[前端测试]
Backend --> BackTest[后端测试]
Database --> DataTest[数据测试]
FrontTest --> Integration[集成测试]
BackTest --> Integration
DataTest --> Integration
Integration --> Deploy{部署准备}
Deploy -->|通过| Production[生产环境]
Deploy -->|失败| Bug[修复问题]
Bug --> Integration
Production --> Monitor[监控运维]
Monitor --> End([项目完成])
style Start fill:#e1f5fe
style End fill:#e8f5e8
style Bug fill:#ffebee
序列图详解
基本语法
markdown
```mermaid
sequenceDiagram
Alice->>Bob: 你好Bob,你好吗?
Bob-->>Alice: 很好,谢谢!
Alice-)Bob: 再见!
**渲染效果**:
```mermaid
sequenceDiagram
Alice->>Bob: 你好Bob,你好吗?
Bob-->>Alice: 很好,谢谢!
Alice-)Bob: 再见!
激活框和生命线
markdown
```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务器
A->>+B: 请求数据
Note right of B: 处理请求
B-->>-A: 返回数据
A->>+B: 另一个请求
B->>+B: 内部处理
B-->>-B: 处理完成
B-->>-A: 返回结果
**渲染效果**:
```mermaid
sequenceDiagram
participant A as 客户端
participant B as 服务器
A->>+B: 请求数据
Note right of B: 处理请求
B-->>-A: 返回数据
A->>+B: 另一个请求
B->>+B: 内部处理
B-->>-B: 处理完成
B-->>-A: 返回结果
循环和条件
markdown
```mermaid
sequenceDiagram
participant U as 用户
participant S as 系统
U->>S: 登录请求
alt 用户名存在
S->>S: 验证密码
alt 密码正确
S-->>U: 登录成功
else 密码错误
S-->>U: 密码错误
end
else 用户名不存在
S-->>U: 用户不存在
end
opt 记住密码
S->>S: 保存登录状态
end
**渲染效果**:
```mermaid
sequenceDiagram
participant U as 用户
participant S as 系统
U->>S: 登录请求
alt 用户名存在
S->>S: 验证密码
alt 密码正确
S-->>U: 登录成功
else 密码错误
S-->>U: 密码错误
end
else 用户名不存在
S-->>U: 用户不存在
end
opt 记住密码
S->>S: 保存登录状态
end
类图 (Class Diagram)
markdown
```mermaid
classDiagram
class Animal {
+String name
+int age
+eat()
+sleep()
}
class Dog {
+String breed
+bark()
+wagTail()
}
class Cat {
+String color
+meow()
+purr()
}
Animal <|-- Dog
Animal <|-- Cat
class Owner {
+String name
+feedPet()
}
Owner --> Animal : owns
**渲染效果**:
```mermaid
classDiagram
class Animal {
+String name
+int age
+eat()
+sleep()
}
class Dog {
+String breed
+bark()
+wagTail()
}
class Cat {
+String color
+meow()
+purr()
}
Animal <|-- Dog
Animal <|-- Cat
class Owner {
+String name
+feedPet()
}
Owner --> Animal : owns
状态图 (State Diagram)
markdown
```mermaid
stateDiagram-v2
[*] --> 空闲
空闲 --> 运行 : 开始
运行 --> 暂停 : 暂停
运行 --> 完成 : 结束
暂停 --> 运行 : 继续
暂停 --> 停止 : 停止
停止 --> 空闲 : 重置
完成 --> 空闲 : 重置
完成 --> [*]
state 运行 {
[*] --> 初始化
初始化 --> 处理中
处理中 --> 验证
验证 --> [*]
}
**渲染效果**:
```mermaid
stateDiagram-v2
[*] --> 空闲
空闲 --> 运行 : 开始
运行 --> 暂停 : 暂停
运行 --> 完成 : 结束
暂停 --> 运行 : 继续
暂停 --> 停止 : 停止
停止 --> 空闲 : 重置
完成 --> 空闲 : 重置
完成 --> [*]
state 运行 {
[*] --> 初始化
初始化 --> 处理中
处理中 --> 验证
验证 --> [*]
}
甘特图 (Gantt Chart)
markdown
```mermaid
gantt
title 项目开发时间线
dateFormat YYYY-MM-DD
section 需求分析
需求收集 :done, des1, 2024-01-01,2024-01-05
需求分析 :done, des2, after des1, 5d
需求评审 :done, des3, after des2, 2d
section 设计阶段
系统设计 :active, design1, 2024-01-12, 7d
UI设计 : design2, after design1, 5d
数据库设计 : design3, after design1, 3d
section 开发阶段
前端开发 : dev1, after design2, 10d
后端开发 : dev2, after design3, 12d
测试 : test1, after dev1, 5d
**渲染效果**:
```mermaid
gantt
title 项目开发时间线
dateFormat YYYY-MM-DD
section 需求分析
需求收集 :done, des1, 2024-01-01,2024-01-05
需求分析 :done, des2, after des1, 5d
需求评审 :done, des3, after des2, 2d
section 设计阶段
系统设计 :active, design1, 2024-01-12, 7d
UI设计 : design2, after design1, 5d
数据库设计 : design3, after design1, 3d
section 开发阶段
前端开发 : dev1, after design2, 10d
后端开发 : dev2, after design3, 12d
测试 : test1, after dev1, 5d
饼图 (Pie Chart)
markdown
```mermaid
pie title 网站访问来源
"搜索引擎" : 45
"社交媒体" : 25
"直接访问" : 20
"邮件营销" : 7
"其他" : 3
**渲染效果**:
```mermaid
pie title 网站访问来源
"搜索引擎" : 45
"社交媒体" : 25
"直接访问" : 20
"邮件营销" : 7
"其他" : 3
用户旅程图 (User Journey)
markdown
```mermaid
journey
title 用户购物旅程
section 发现
访问主页: 3: 用户
浏览商品: 4: 用户
搜索产品: 4: 用户
section 考虑
查看详情: 4: 用户
比较价格: 3: 用户
阅读评价: 5: 用户
section 购买
加入购物车: 4: 用户
结算: 3: 用户
支付: 2: 用户
section 使用
收到商品: 5: 用户
使用产品: 4: 用户
写评价: 4: 用户
**渲染效果**:
```mermaid
journey
title 用户购物旅程
section 发现
访问主页: 3: 用户
浏览商品: 4: 用户
搜索产品: 4: 用户
section 考虑
查看详情: 4: 用户
比较价格: 3: 用户
阅读评价: 5: 用户
section 购买
加入购物车: 4: 用户
结算: 3: 用户
支付: 2: 用户
section 使用
收到商品: 5: 用户
使用产品: 4: 用户
写评价: 4: 用户
Git 图 (Git Graph)
markdown
```mermaid
gitgraph
commit id: "初始提交"
commit id: "添加用户模块"
branch feature/auth
commit id: "添加登录功能"
commit id: "添加注册功能"
checkout main
commit id: "修复主页bug"
merge feature/auth
commit id: "版本v1.0"
branch hotfix
commit id: "紧急修复"
checkout main
merge hotfix
commit id: "版本v1.0.1"
**渲染效果**:
```mermaid
gitgraph
commit id: "初始提交"
commit id: "添加用户模块"
branch feature/auth
commit id: "添加登录功能"
commit id: "添加注册功能"
checkout main
commit id: "修复主页bug"
merge feature/auth
commit id: "版本v1.0"
branch hotfix
commit id: "紧急修复"
checkout main
merge hotfix
commit id: "版本v1.0.1"
实际应用场景
系统架构图
markdown
```mermaid
flowchart TB
subgraph "用户层"
Web[Web浏览器]
Mobile[移动应用]
API[API客户端]
end
subgraph "网关层"
Gateway[API网关]
Auth[认证服务]
end
subgraph "服务层"
UserService[用户服务]
OrderService[订单服务]
PaymentService[支付服务]
NotificationService[通知服务]
end
subgraph "数据层"
UserDB[(用户数据库)]
OrderDB[(订单数据库)]
Cache[(Redis缓存)]
Queue[消息队列]
end
Web --> Gateway
Mobile --> Gateway
API --> Gateway
Gateway --> Auth
Gateway --> UserService
Gateway --> OrderService
Gateway --> PaymentService
UserService --> UserDB
OrderService --> OrderDB
PaymentService --> Queue
NotificationService --> Queue
UserService --> Cache
OrderService --> Cache
style Gateway fill:#e1f5fe
style Auth fill:#fff3e0
style Cache fill:#f3e5f5
### API 调用流程
```markdown
```mermaid
sequenceDiagram
participant C as 客户端
participant G as API网关
participant A as 认证服务
participant U as 用户服务
participant D as 数据库
participant R as Redis
C->>G: 请求用户信息
G->>A: 验证Token
A->>R: 检查Token缓存
R-->>A: Token有效
A-->>G: 认证成功
G->>U: 获取用户信息
U->>R: 检查用户缓存
alt 缓存存在
R-->>U: 返回用户数据
else 缓存不存在
U->>D: 查询数据库
D-->>U: 返回用户信息
U->>R: 更新缓存
end
U-->>G: 返回用户信息
G-->>C: 响应用户数据
### 业务流程图
```markdown
```mermaid
flowchart TD
Start([用户下单]) --> Check{检查库存}
Check -->|有库存| Reserve[预留库存]
Check -->|无库存| OutOfStock[库存不足]
OutOfStock --> Notify[通知用户]
Notify --> End1([结束])
Reserve --> Payment{支付处理}
Payment -->|成功| ConfirmOrder[确认订单]
Payment -->|失败| ReleaseStock[释放库存]
ReleaseStock --> PaymentFailed[支付失败]
PaymentFailed --> End2([结束])
ConfirmOrder --> UpdateInventory[更新库存]
UpdateInventory --> SendNotification[发送通知]
SendNotification --> Logistics[安排物流]
Logistics --> End3([订单完成])
style Start fill:#e8f5e8
style End1 fill:#ffebee
style End2 fill:#ffebee
style End3 fill:#e8f5e8
style OutOfStock fill:#ffebee
style PaymentFailed fill:#ffebee
## 样式和主题
### 节点样式
```markdown
```mermaid
flowchart LR
A[默认样式] --> B[样式1]
A --> C[样式2]
A --> D[样式3]
style B fill:#f9f,stroke:#333,stroke-width:4px
style C fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
style D fill:#f96,stroke:#333,stroke-width:4px,color:#fff
### 类样式
```markdown
```mermaid
flowchart LR
A[节点A]:::classA --> B[节点B]:::classB
A --> C[节点C]:::classC
classDef classA fill:#e1f5fe,stroke:#01579b,stroke-width:2px
classDef classB fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
classDef classC fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
## 配置和兼容性
### VitePress 配置
```javascript
// .vitepress/config.js
export default {
markdown: {
mermaid: true
}
}
GitHub 支持
GitHub 原生支持 Mermaid,可以直接在 Markdown 文件中使用:
markdown
```mermaid
graph LR
A --> B
### 其他平台支持
| 平台 | 支持状态 | 配置要求 |
|------|----------|----------|
| **GitHub** | ✅ 原生支持 | 无需配置 |
| **GitLab** | ✅ 原生支持 | 无需配置 |
| **VitePress** | ✅ 插件支持 | 需要配置 |
| **Jekyll** | ✅ 插件支持 | 安装插件 |
| **Hugo** | ✅ 主题支持 | 依赖主题 |
## 最佳实践
### 设计建议
```markdown
✅ 推荐做法:
1. **保持简洁**:
- 避免过于复杂的图表
- 使用清晰的标签和连接
2. **合理布局**:
- 选择合适的图表方向
- 保持逻辑流向清晰
3. **统一样式**:
- 使用一致的颜色主题
- 保持图表风格统一
4. **添加说明**:
- 为复杂图表添加标题
- 提供必要的文字说明
❌ 避免做法:
1. 图表过于复杂难以理解
2. 连接线交叉过多
3. 标签模糊不清
4. 缺少必要的图例
性能考虑
markdown
- **大型图表优化**:
- 考虑拆分复杂图表
- 使用子图组织结构
- **加载性能**:
- 避免在单页面使用过多图表
- 考虑懒加载实现
- **移动端适配**:
- 确保图表在小屏幕上可读
- 考虑横向滚动设计
相关语法
工具和资源
在线编辑器
- Mermaid Live Editor: 官方在线编辑器
- Draw.io: 通用图表绘制工具
- Lucidchart: 专业图表制作平台
- Excalidraw: 手绘风格图表工具
开发工具
- Mermaid CLI: 命令行工具
- VS Code Mermaid: Visual Studio Code 插件
- Atom Mermaid: Atom 编辑器插件
- IntelliJ Mermaid: JetBrains IDE 插件
参考资源
- Mermaid 官方文档: 完整语法参考
- Mermaid 示例库: 各种图表示例
- GitHub Mermaid: 在 GitHub 中使用
- Awesome Mermaid: 相关资源收集
通过掌握流程图语法,您可以在文档中创建专业的可视化图表,提升内容的表达效果和理解度。