本主题支持在 Markdown 内容中直接使用 Mermaid 图表。Mermaid 让你通过文本和代码来创建图表和可视化。
关于 Mermaid.js
本主题集成了 Mermaid.js(v11),可以基于 Markdown 代码块中的文本定义来渲染图表。Mermaid 是一个基于 JavaScript 的图表绘制工具,其文本语法受 Markdown 启发。
完整的语法文档请参阅 Mermaid.js 文档。
快速开始
要创建 Mermaid 图表,只需使用以 mermaid 作为语言标识符的围栏代码块:
1
2
3
4
5
|
```mermaid
graph TD
A[开始] --> B[处理]
B --> C[结束]
```
|
页面加载时图表会自动渲染。
特性
- 自动检测:仅当页面包含图表时才加载 Mermaid 脚本
- 主题支持:图表自动适配浅色/深色模式
- HTML 标签:支持在标签中使用 HTML 内容(如
<br/> 换行)
- 可配置:可在站点配置中自定义版本、安全级别等
配置
你可以在站点配置中配置 Mermaid:
hugo.yaml:
1
2
3
4
5
6
7
8
9
|
params:
article:
mermaid:
version: "11" # CDN 上的 Mermaid 版本
look: classic # classic 或 handDrawn(手绘风格)
lightTheme: default # 浅色模式主题
darkTheme: neutral # 深色模式主题
securityLevel: strict # strict(默认)、loose、antiscript、sandbox
htmlLabels: true # 启用标签中的 HTML
|
hugo.toml:
1
2
3
4
5
6
7
|
[params.article.mermaid]
version = "11" # CDN 上的 Mermaid 版本
look = "classic" # classic 或 handDrawn(手绘风格)
lightTheme = "default" # 浅色模式主题
darkTheme = "neutral" # 深色模式主题
securityLevel = "strict" # strict(默认)、loose、antiscript、sandbox
htmlLabels = true # 启用标签中的 HTML
|
其他全局选项
以下可选设置未指定时将使用 Mermaid 的默认值:
hugo.yaml:
1
2
3
4
5
6
7
8
9
|
params:
article:
mermaid:
maxTextSize: 50000 # 最大文本大小(默认:50000)
maxEdges: 500 # 允许的最大边数(默认:500)
fontSize: 16 # 全局字体大小(像素,默认:16)
fontFamily: "arial" # 全局字体族
curve: "basis" # 线条曲线:basis、cardinal、linear(默认:basis)
logLevel: 5 # 调试级别 0-5,0=debug,5=fatal(默认:5)
|
hugo.toml:
1
2
3
4
5
6
7
|
[params.article.mermaid]
maxTextSize = 50000 # 最大文本大小(默认:50000)
maxEdges = 500 # 允许的最大边数(默认:500)
fontSize = 16 # 全局字体大小(像素,默认:16)
fontFamily = "arial" # 全局字体族
curve = "basis" # 线条曲线:basis、cardinal、linear(默认:basis)
logLevel = 5 # 调试级别 0-5,0=debug,5=fatal(默认:5)
|
如需图表特定选项(如 flowchart.useMaxWidth),可直接在图表中使用 Mermaid 的 init 指令:
1
2
3
4
5
|
```mermaid
%%{init: {'flowchart': {'useMaxWidth': false}}}%%
flowchart LR
A --> B
```
|
安全提示: 建议使用默认的 securityLevel: strict。仅当需要在图表中使用 <br/> 等 HTML 标签时,才设置为 loose。
可用主题
| 主题 |
描述 |
default |
标准彩色主题 |
neutral |
灰度配色,适合打印和深色模式 |
dark |
专为深色背景设计 |
forest |
绿色调色板 |
base |
极简主题,可通过 themeVariables 自定义 |
null |
完全禁用主题 |
自定义主题变量
如需完全控制,可使用 base 主题配合自定义变量:
hugo.yaml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
params:
article:
mermaid:
lightTheme: base
darkTheme: base
lightThemeVariables:
primaryColor: "#4a90d9"
primaryTextColor: "#ffffff"
lineColor: "#333333"
darkThemeVariables:
primaryColor: "#6ab0f3"
primaryTextColor: "#ffffff"
lineColor: "#cccccc"
background: "#1a1a2e"
|
hugo.toml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[params.article.mermaid]
lightTheme = "base"
darkTheme = "base"
[params.article.mermaid.lightThemeVariables]
primaryColor = "#4a90d9"
primaryTextColor = "#ffffff"
lineColor = "#333333"
[params.article.mermaid.darkThemeVariables]
primaryColor = "#6ab0f3"
primaryTextColor = "#ffffff"
lineColor = "#cccccc"
background = "#1a1a2e"
|
常用变量:primaryColor、secondaryColor、tertiaryColor、primaryTextColor、lineColor、background、fontFamily
注意: 主题变量仅适用于 base 主题,且必须使用十六进制颜色值(如 #ff0000)。
图表类型
流程图
流程图是最常用的图表类型。使用 graph 或 flowchart 配合方向指示符:
TD 或 TB:从上到下
BT:从下到上
LR:从左到右
RL:从右到左
flowchart LR
A[直角边] -->|链接文字| B(圆角边)
B --> C{判断}
C -->|选项一| D[结果一]
C -->|选项二| E[结果二]时序图
非常适合展示组件之间的交互:
sequenceDiagram
participant Alice
participant Bob
Alice->>John: 你好 John,最近怎么样?
loop 健康检查
John->>John: 对抗疑病症
end
Note right of John: 理性的思考
占了上风!
John-->>Alice: 很好!
John->>Bob: 你呢?
Bob-->>John: 非常好!类图
可视化类结构和关系:
classDiagram
Animal <|-- Duck
Animal <|-- Fish
Animal <|-- Zebra
Animal : +int age
Animal : +String gender
Animal: +isMammal()
Animal: +mate()
class Duck{
+String beakColor
+swim()
+quack()
}
class Fish{
-int sizeInFeet
-canEat()
}
class Zebra{
+bool is_wild
+run()
}状态图
建模状态机和状态转换:
stateDiagram-v2
[*] --> 静止
静止 --> [*]
静止 --> 移动
移动 --> 静止
移动 --> 碰撞
碰撞 --> [*]实体关系图
记录数据库架构:
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
CUSTOMER {
string name
string custNumber
string sector
}
ORDER {
int orderNumber
string deliveryAddress
}甘特图
规划和跟踪项目进度:
gantt
title 甘特图示例
dateFormat YYYY-MM-DD
section 第一部分
任务一 :a1, 2024-01-01, 30d
另一个任务 :after a1, 20d
section 第二部分
又一个任务 :2024-01-12, 12d
再一个任务 :24d饼图
展示比例数据:
pie showData
title 产品 X 的关键元素
"钙" : 42.96
"钾" : 50.05
"镁" : 10.01
"铁" : 5Git 图
可视化 Git 分支策略:
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
commit思维导图
创建层级思维导图:
mindmap
root((思维导图))
起源
悠久的历史
普及化
英国通俗心理学作家 Tony Buzan
研究
关于有效性
和特性
关于自动生成
用途
创意技巧
战略规划
论证映射
工具
纸和笔
Mermaid时间线
展示时间顺序的事件:
timeline
title 社交媒体平台发展史
2002 : LinkedIn
2004 : Facebook
: Google
2005 : YouTube
2006 : Twitter高级功能
标签中使用 HTML
要在标签中使用 HTML,必须在站点配置中设置 securityLevel: loose:
hugo.yaml:
1
2
3
4
5
|
params:
article:
mermaid:
securityLevel: loose
htmlLabels: true
|
hugo.toml:
1
2
3
|
[params.article.mermaid]
securityLevel = "loose"
htmlLabels = true
|
然后就可以使用 <br/> 等 HTML 标签来换行:
1
2
3
4
|
```mermaid
graph TD
A[第一行<br/>第二行] --> B[<b>加粗</b>文本]
```
|
单图主题覆盖
使用 Mermaid 的前置元数据为特定图表覆盖主题:
1
2
3
4
5
|
```mermaid
%%{init: {'theme': 'forest'}}%%
graph TD
A[开始] --> B[结束]
```
|
%%{init: {'theme': 'forest'}}%%
graph TD
A[圣诞节] -->|获得钱| B(去购物)
B --> C{让我想想}
C -->|选项一| D[笔记本电脑]
C -->|选项二| E[iPhone]
C -->|选项三| F[汽车]使用 style 内联样式
你可以使用 style 指令直接在图表中为单个节点设置样式:
1
2
3
4
5
6
7
|
```mermaid
flowchart LR
A[开始] --> B[处理] --> C[结束]
style A fill:#4ade80,stroke:#166534,color:#000
style B fill:#60a5fa,stroke:#1e40af,color:#000
style C fill:#f87171,stroke:#991b1b,color:#fff
```
|
效果:
flowchart LR
A[开始] --> B[处理] --> C[结束]
style A fill:#4ade80,stroke:#166534,color:#000
style B fill:#60a5fa,stroke:#1e40af,color:#000
style C fill:#f87171,stroke:#991b1b,color:#fff样式属性包括:
fill - 背景色
stroke - 边框颜色
stroke-width - 边框粗细
color - 文本颜色
stroke-dasharray - 虚线边框(如 5 5)
使用 CSS 类样式
你可以使用 classDef 定义可复用的样式,通过 :::className 来应用:
1
2
3
4
5
6
7
|
```mermaid
flowchart LR
A:::success --> B:::info --> C:::warning
classDef success fill:#4ade80,stroke:#166534,color:#000
classDef info fill:#60a5fa,stroke:#1e40af,color:#000
classDef warning fill:#fbbf24,stroke:#92400e,color:#000
```
|
效果:
flowchart LR
A:::success --> B:::info --> C:::warning
classDef success fill:#4ade80,stroke:#166534,color:#000
classDef info fill:#60a5fa,stroke:#1e40af,color:#000
classDef warning fill:#fbbf24,stroke:#92400e,color:#000子图
将相关节点分组:
flowchart TB
subgraph 第一组
a1-->a2
end
subgraph 第二组
b1-->b2
end
subgraph 第三组
c1-->c2
end
第一组 --> 第二组
第三组 --> 第二组
第二组 --> c2主题切换
本主题会自动检测站点的浅色/深色模式偏好,并相应地调整 Mermaid 图表主题:
- 浅色模式:使用
default Mermaid 主题
- 深色模式:使用
dark Mermaid 主题(可配置)
尝试切换主题开关,实时查看图表更新!
复杂示例
以下是一个包含子图、HTML 标签、表情符号和自定义样式的示例:
flowchart TD
subgraph client["👤 客户端"]
A["用户设备
192.168.1.10"]
end
subgraph cloud["☁️ 云网关"]
B["负载均衡器
(SSL 终止)"]
end
subgraph server["🖥️ 应用服务器"]
C["API 网关
10.0.0.1"]
D["认证服务
10.0.0.2"]
E["Web 服务器
10.0.0.3"]
F["数据库
10.0.0.4"]
end
A -- "HTTPS 请求" --> B
B -- "转发
(内部)" --> C
C -- "认证" --> D
D -- "令牌" --> C
C -- "路由" --> E
E --> F
style client fill:#1a365d,stroke:#2c5282,color:#fff
style cloud fill:#f6ad55,stroke:#dd6b20,color:#000
style server fill:#276749,stroke:#22543d,color:#fff
注意: 此示例需要 securityLevel: loose 才能使 HTML 标签和样式生效。
已知限制
深色模式主题
Mermaid.js 的内置主题存在一些限制:
dark 主题(默认):文本对比度最佳,但某些图表背景可能偏棕色(如甘特图)
neutral 主题:背景颜色更好,但某些文本(标签、图例)的对比度可能降低
如需完全控制,请使用 base 主题配合自定义变量:
hugo.yaml:
1
2
3
4
5
6
7
8
9
|
params:
article:
mermaid:
darkTheme: base
darkThemeVariables:
primaryColor: "#1f2937"
primaryTextColor: "#ffffff"
lineColor: "#9ca3af"
textColor: "#e5e7eb"
|
hugo.toml:
1
2
3
4
5
6
7
8
|
[params.article.mermaid]
darkTheme = "base"
[params.article.mermaid.darkThemeVariables]
primaryColor = "#1f2937"
primaryTextColor = "#ffffff"
lineColor = "#9ca3af"
textColor = "#e5e7eb"
|
随着 Mermaid.js 的发展,我们计划在未来的更新中改进深色模式主题。
故障排查
图表没有渲染?
- 确保使用的是以
mermaid 为语言标识的围栏代码块
- 检查浏览器的控制台是否有语法错误
- 在 Mermaid Live Editor 中验证 Mermaid 语法
标签中的 HTML 不生效?
标签中使用 HTML 需要 securityLevel: loose。请更新配置:
hugo.yaml:
1
2
3
4
5
|
params:
article:
mermaid:
securityLevel: loose
htmlLabels: true
|
hugo.toml:
1
2
3
|
[params.article.mermaid]
securityLevel = "loose"
htmlLabels = true
|
警告: 使用 loose 安全级别允许在图表中使用 HTML。仅在信任图表内容来源时使用。
语法错误?
Mermaid 对语法要求严格。常见问题:
- 箭头周围缺少空格
- 括号或引号未闭合
- 无效的节点 ID(避免使用特殊字符)
相关资源