ToolAct工具行动

Mermaid 在线编辑器

输入内容
转换结果

等待输入

行数: 6字符数: 108
等待输入缩放: 100%

什么是 Mermaid 图表编辑器?

Mermaid 是一款基于 JavaScript 的图表绘制工具,它使用类似 Markdown 的文本语法来生成各种图表。无需手动拖拽图形,只需编写简单的文本描述,即可自动生成精美的流程图、时序图、类图等。本工具提供在线 Mermaid 编辑环境,支持实时预览、拖拽缩放和导出功能,帮助开发者快速创建和分享图表。 用于生产数据或真实代码库时,仍应结合解析器、测试结果和项目规范再次确认。

使用方法

使用方法

  1. 在左侧编辑器中输入 Mermaid 语法
  2. 右侧面板实时渲染图表
  3. 使用鼠标拖动平移,滚轮缩放视图
  4. 点击导出按钮保存为 PNG 或 SVG

图表检查

  • 每次有意义的编辑后及时渲染;Mermaid 错误常由缩进问题、标点未转义或所选图表类型不支持该语法引起。
  • 导出前请确认标签、箭头和换行在实际使用尺寸下依然清晰可读。

使用场景

从 Mermaid 代码快速生成图表在左侧编辑 Mermaid 语法,右侧通过防抖渲染实时预览图表。内置示例涵盖流程图、时序图、类图、状态图、ER 图、甘特图、饼图、思维导图和用户旅程图。同一段源码可以直接粘贴到 README、Wiki 或 GitHub Issue 中,宿主渲染器会自行绘制图表。
通过平移、缩放和全屏查看大型图表预览面板支持鼠标拖拽平移、滚轮缩放(10% 到 500%)、双击重置视图,以及全屏模式(状态会保存在 localStorage 中)。对于复杂的架构图或流程图,这比静态预览更容易检查细节。在截图前放大到密集区域,往往是让箭头标签在密集流程图中保持可读的唯一方法。
导出图表用于文档图表渲染成功后,可以导出为 SVG 用于可编辑的矢量场景,或通过 Canvas 渲染为白底 PNG。语法错误会直接显示在预览区,方便在将图表放入 README、幻灯片或工单之前修复。PNG 适合幻灯片和纯图片渠道,SVG 则保留了链接和样式的可编辑性,便于设计交接。
为截图切换主题和布局方向在截图前切换主题(默认、暗色、森林色、中性色)和图方向(TD/LR/BT/RL),确保同一张图表在亮色文档和暗色仪表盘中都清晰可读。活跃的 themeVariables 还支持覆盖 fontFamily、primaryColor 和边框颜色,满足品牌导出需求。双击可重置缩放,方便在主题切换后干净地截取新配色。
在流程图、时序图、ER 图、甘特图等语法间切换根据要解答的问题选择合适的图表类型:流程图(graph TD)用于分支决策,sequenceDiagram 用于时间序列调用,erDiagram 用于实体关系建模,gantt 用于项目排期。Mermaid 语法 v10(及后续 v11)变更了一些默认行为——classDef 现在需要在顶部声明,subgraph id 变为必填,甘特图改用 ISO 日期格式——因此从旧版本复制的代码片段可能需要小幅调整才能正常渲染。

技术原理

Mermaid 是由 Knut Sveidqvist 于 2014 年发起的开源图表渲染库。其核心思路是将人类可读的 DSL(领域特定语言)通过解析器转换为 SVG 图形。完整流水线分为三步:词法/语法解析器(由 jison 生成)将源码解析为内部数据结构;针对图表类型的布局算法计算节点和边的坐标;最后由 d3 将布局渲染为 SVG 元素。 不同图表使用不同的布局引擎:流程图默认使用 dagre(分层有向图布局),从 v10 起也支持 ELK(功能更强但体积更大);时序图使用自定义的时序布局,将参与者水平排列、消息垂直堆叠;甘特图在时间轴上手动排列任务并支持依赖关系;类图和状态图同样依赖 dagre。布局算法决定了图表的可读性——dagre 遵循 Sugiyama 框架进行层级分配、边交叉最小化和间距收紧,对一般规模的流程图效果很好。 与 Graphviz 相比,Mermaid 的语法更接近自然语言(如 A --> B),且原生在浏览器中渲染并支持实时预览。Graphviz 的 DOT 语言更底层,其布局引擎(fdp、neato 等)更成熟,但需要本地安装且默认样式较旧。Mermaid 目前支持超过 15 种图表类型——flowchart、sequenceDiagram、classDiagram、stateDiagram、erDiagram、gantt、pie、journey、gitGraph、mindmap、timeline、quadrantChart、sankey、xychart、block 等——覆盖了绝大多数软件工程绘图需求。

  • 解析:jison 生成的解析器将 DSL 文本转换为内部 AST;每种图表类型有独立的语法规则文件
  • 布局算法:流程图使用 dagre 进行分层有向图布局,可切换为 ELK;时序图和甘特图使用各自专用的布局逻辑
  • 渲染引擎:SVG 由 d3 绘制;节点使用 g/rect/path/text 元素,箭头通过 marker 定义
  • 图表类型:支持流程图、时序图、类图、状态图、ER 图、甘特图、饼图、用户旅程图、gitGraph、思维导图等十余种
  • 与 Graphviz 对比:Mermaid 语法更友好,原生支持 Web 端;Graphviz 布局更精细,适合大型复杂图
  • 主题切换:通过 themeVariables 配置或 init 指令在 default、dark、forest、neutral 等内置主题间切换

示例

流程图

flowchart TD
    A[开始] --> B{是否登录?}
    B -- 是 --> C[首页]
    B -- 否 --> D[登录页]
    D --> E[输入账号密码]
    E --> C
    C --> F[结束]

时序图

sequenceDiagram
    participant Browser
    participant Server
    participant Database
    Browser->>Server: GET /api/user
    Server->>Database: SELECT * FROM users
    Database-->>Server: 用户数据
    Server-->>Browser: JSON 响应

甘特图

gantt
    title 项目计划
    dateFormat YYYY-MM-DD
    section 设计
    需求分析 :a1, 2026-06-01, 7d
    UI 设计  :a2, after a1, 10d
    section 开发
    前端 :b1, after a2, 20d
    后端 :b2, after a2, 18d
    section 测试
    集成测试 :c1, after b1, 7d

常见问题

Mermaid 支持哪些图表类型?

Mermaid 涵盖流程图、时序图、类图、状态图、实体关系图、甘特图、饼图、用户旅程图、Git 图、思维导图和象限图。代码第一行声明类型(如 'flowchart TD' 或 'sequenceDiagram')。

为什么我的图表显示语法错误?

最常见原因是缺少分号或箭头符号、节点标签括号不匹配(含特殊字符的文本要加引号:A["Hello (world)"])、箭头语法与图表类型不符(流程图用 -->、时序图用 ->>),以及子图缩进问题。错误面板通常会指向解析中断的那一行。

如何把图表导出为图片?

使用导出按钮可保存为 SVG(矢量、可缩放,推荐用于幻灯片和文档)或 PNG(位图,便于聊天和邮件分享)。如果想直接嵌入 HTML 或在 Figma、Illustrator 中继续编辑,可复制 SVG 源码。

可以自定义颜色和样式吗?

可以。用 'classDef' 定义类似 CSS 的样式,再用 'class A,B,C myStyle' 应用。一次性修改可用 'style A fill:#f9f,stroke:#333' 等内联写法。全局主题可在第一行写 %%{init: {'theme':'forest'}}%%——内置主题包括 default、forest、dark、neutral 和 base。

对图表长度或复杂度有限制吗?

Mermaid 渲染数百个节点没有问题,但超过这个量级布局时间会非线性增长。如果图表渲染慢或难以阅读,建议拆分成多个互相链接的图,或用子图分组相关节点;边过多交叉时,自动布局效果会变差。

如何为节点添加超链接或点击事件?

使用 'click NodeId "https://example.com"' 让节点变成链接,或用 'click NodeId callback "tooltip"' 触发通过 mermaid.parseError 注册的 JavaScript 回调。导出的 SVG 中链接也会保留,只要嵌入页面不剥离它们即可。

同样的 Mermaid 代码还能在哪里渲染?

GitHub Markdown、GitLab、Notion、Obsidian、Typora、VS Code(带扩展)以及大多数现代文档工具都原生支持 Mermaid 代码块。把同样的代码粘贴过去,它就会按各平台所选的主题渲染。