跳至內容

流程圖 - 基本語法

流程圖由節點(幾何形狀)和(箭頭或線條)組成。 Mermaid 程式碼定義了如何建立節點和邊,並可容納不同的箭頭類型、多向箭頭,以及任何來往子圖的連結。

警告

如果您在流程圖節點中使用「end」這個字,請將整個單字或任何字母大寫(例如,「End」或「END」),或套用此變通方法。 輸入全部小寫字母「end」會破壞流程圖。

警告

如果您在連接流程圖節點中將字母「o」或「x」作為第一個字母,請在字母前新增一個空格或將字母大寫(例如,「dev--- ops」、「dev---Ops」)。

輸入「A---oB」會建立一個圓形邊

輸入「A---xB」會建立一個交叉邊

一個節點(預設)

資訊

id 是顯示在方塊中的內容。

提示

除了 flowchart,也可以使用 graph

一個帶有文字的節點

也可以在方塊中設定與 id 不同的文字。 如果這樣做多次,則將使用該節點找到的最後一個文字。 此外,如果您稍後定義節點的邊,則可以省略文字定義。 呈現方塊時,將使用先前定義的文字。

Unicode 文字

使用 " 將 Unicode 文字括起來。

Markdown 格式

使用雙引號和反引號 "` 文字 `" 將 Markdown 文字括起來。

方向

此陳述式宣告流程圖的方向。

這宣告流程圖的方向為由上至下(TDTB)。

這宣告流程圖的方向為由左至右(LR)。

可能的流程圖方向為

  • TB - 由上至下
  • TD - 由上而下/與由上至下相同
  • BT - 由下至上
  • RL - 由右至左
  • LR - 由左至右

節點形狀

一個具有圓角的節點

一個體育場形狀的節點

一個副程式形狀的節點

一個圓柱形狀的節點

一個圓形的節點

一個不對稱形狀的節點

目前僅可能使用上述形狀,而非其鏡像。 這可能會在未來版本中變更。

一個菱形節點

一個六邊形節點

平行四邊形

平行四邊形 alt

梯形

梯形 alt

雙圓形

Mermaid 流程圖中擴充的節點形狀 (v11.3.0+)

Mermaid 導入 30 種新形狀,以增強流程圖建立的彈性和精確度。 這些新形狀提供了更多選項,以便在流程圖中視覺化地表示流程、決策、事件、資料儲存和其他元素,從而提高清晰度和語義意義。

形狀定義的新語法

Mermaid 現在支援定義形狀類型的一般語法,以適應不斷增加的形狀數量。 此語法可讓您使用清晰且彈性的格式,將特定形狀指派給節點

A@{ shape: rect }

此語法會將節點 A 建立為矩形。 其呈現方式與 A["A"]A 相同。

新形狀的完整清單

以下是新導入形狀及其對應的語義意義、簡短名稱和別名的完整清單

語義名稱形狀名稱簡短名稱描述支援的別名
卡片有缺口的矩形notch-rect代表一張卡片cardnotched-rectangle
整理沙漏hourglass代表整理作業collatehourglass
通訊連結閃電bolt通訊連結com-linklightning-bolt
註解大括號brace新增註解brace-lcomment
註解右大括號brace-r新增註解
兩側都有大括號的註解大括號braces新增註解
資料輸入/輸出向右傾斜lean-r代表輸入或輸出in-outlean-right
資料輸入/輸出向左傾斜lean-l代表輸出或輸入lean-leftout-in
資料庫圓柱體cyl資料庫儲存cylinderdatabasedb
決策菱形diam決策步驟decisiondiamondquestion
延遲半圓角矩形delay代表延遲half-rounded-rectangle
直接存取儲存水平圓柱體h-cyl直接存取儲存dashorizontal-cylinder
磁碟儲存有線圓柱體lin-cyl磁碟儲存disklined-cylinder
顯示彎曲梯形curv-trap代表顯示curved-trapezoiddisplay
分割流程分割矩形div-rect分割流程形狀div-procdivided-processdivided-rectangle
文件文件doc表示一份文件docdocument
事件圓角矩形rounded表示一個事件event
萃取三角形tri萃取流程extracttriangle
分叉/合併實心矩形fork流程中的分叉或合併join
內部儲存窗格win-pane內部儲存internal-storagewindow-pane
連接點實心圓f-circ連接點filled-circlejunction
帶線文件帶線文件lin-doc帶線文件lined-document
帶線/陰影流程帶線矩形lin-rect帶線流程形狀lin-proclined-processlined-rectangleshaded-process
迴圈限制梯形五邊形notch-pent迴圈限制步驟loop-limitnotched-pentagon
手動檔案翻轉三角形flip-tri手動檔案操作flipped-trianglemanual-file
手動輸入傾斜矩形sl-rect手動輸入步驟manual-inputsloped-rectangle
手動操作頂部梯形trap-t表示一項手動任務inv-trapezoidmanualtrapezoid-top
多份文件堆疊文件docs多份文件documentsst-docstacked-document
多個流程堆疊矩形st-rect多個流程processesprocsstacked-rectangle
奇特奇特odd奇特形狀
紙帶旗幟flag紙帶paper-tape
準備條件六邊形hex準備或條件步驟hexagonprepare
優先動作底部梯形trap-b優先動作prioritytrapezoidtrapezoid-bottom
流程矩形rect標準流程形狀procprocessrectangle
開始圓形circle起點circ
開始小圓形sm-circ小型起點small-circlestart
停止雙圓形dbl-circ表示停止點double-circle
停止框線圓形fr-circ停止點framed-circlestop
儲存資料領結矩形bow-rect儲存資料bow-tie-rectanglestored-data
子流程框線矩形fr-rect子流程framed-rectanglesubprocsubprocesssubroutine
摘要交叉圓形cross-circ摘要crossed-circlesummary
標籤文件標籤文件tag-doc標籤文件tag-doctagged-document
標籤流程標籤矩形tag-rect標籤流程tag-proctagged-processtagged-rectangle
終點體育場形stadium終點pillterminal
文字區塊文字區塊text文字區塊

新形狀的流程圖範例

以下是一個利用一些新引入形狀的流程圖範例

流程

事件

終點(體育場形)

子流程

資料庫(圓柱體)

開始(圓形)

奇特

決策(菱形)

準備條件(六邊形)

資料輸入/輸出(向右傾斜)

資料輸入/輸出(向左傾斜)

優先動作(底部梯形)

手動操作(頂部梯形)

停止(雙圓形)

文字區塊

卡片(缺口矩形)

帶線/陰影流程

開始(小圓形)

停止(框線圓形)

分叉/合併(長矩形)

整理(沙漏)

註解(大括號)

右側註解(右大括號)

兩側都有大括號的註解

文件

延遲(半圓角矩形)

直接存取儲存(水平圓柱體)

磁碟儲存(帶線圓柱體)

顯示(彎曲梯形)

分割流程(分割矩形)

萃取(小三角形)

內部儲存(窗格)

連接點(實心圓)

帶線文件

迴圈限制(缺口五邊形)

手動檔案(翻轉三角形)

手動輸入(傾斜矩形)

多份文件(堆疊文件)

多個流程(堆疊矩形)

紙帶(旗幟)

儲存資料(領結矩形)

摘要(交叉圓形)

標籤文件

標籤流程(標籤矩形)

Mermaid 流程圖中的特殊形狀(v11.3.0+)

Mermaid 還引入了 2 種特殊形狀來增強您的流程圖:iconimage。這些形狀允許您在流程圖中直接包含圖示和圖片,提供更多視覺背景和清晰度。

圖示形狀

您可以使用 icon 形狀在流程圖中包含圖示。若要使用圖示,您需要先註冊圖示包。請依照這裡提供的指示操作。定義圖示形狀的語法如下:

參數

  • icon:已註冊圖示包中的圖示名稱。
  • form:指定圖示的背景形狀。如果未定義,圖示將沒有背景。選項包括:
    • square (正方形)
    • circle
    • rounded
  • label:與圖示相關聯的文字標籤。這可以是任何字串。如果未定義,則不會顯示標籤。
  • pos:標籤的位置。如果未定義,標籤預設會位於圖示底部。可能的值為:
    • t (頂部)
    • b (底部)
  • h:圖示的高度。如果未定義,則預設為 48,這是最小值。

圖片形狀

您可以使用 image 形狀在流程圖中包含圖片。定義圖片形狀的語法如下:

參數

  • img:要顯示的圖片的 URL。
  • label:與圖片相關聯的文字標籤。這可以是任何字串。如果未定義,則不會顯示標籤。
  • pos:標籤的位置。如果未定義,標籤預設會位於圖片底部。可能的值為:
    • t (頂部)
    • b (底部)
  • w:圖片的寬度。如果未定義,則預設為圖片的自然寬度。
  • h:圖片的高度。如果未定義,則預設為圖片的自然高度。
  • constraint:決定圖片是否應限制節點大小。此設定還確保圖片保持其原始長寬比,並根據寬度(w)調整高度(h)。如果未定義,則預設為 off。可能的值為:
    • on (開啟)
    • off (關閉)

這些新的形狀為您的流程圖提供了額外的彈性和視覺吸引力,使其更具資訊性和吸引力。

節點可以使用連結/邊線連接。可以有不同類型的連結,或將文字字串附加到連結。

在某些情況下,當您想要更改節點的預設位置時,這可能是一個有用的工具。

可以依照以下方式在同一行中宣告多個連結

也可以依照以下方式在同一行中宣告多個節點連結

然後您可以用非常具表達力的方式描述依賴關係。如下面的一行程式碼所示

如果使用基本語法描述相同的圖表,則需要四行。在這裡提醒一下,可能會過度使用此功能,使流程圖在 Markdown 形式中更難以閱讀。瑞典語單字 lagom 就浮現腦海。它的意思是,不多也不少。這也適用於具表達力的語法。

新的箭頭類型

支援新的箭頭類型

  • 圓形邊線
  • 交叉邊線

圓形邊線範例

交叉邊線範例

多向箭頭

可以使用多向箭頭。

流程圖中的每個節點最終都會根據其連結的節點,被指派到渲染圖中的一個等級,也就是垂直或水平層級(取決於流程圖的方向)。依預設,連結可以跨越任意數量的等級,但是您可以要求任何連結比其他連結更長,方法是在連結定義中添加額外的破折號。

在以下範例中,從節點 B 到節點 E 的連結中添加了兩個額外的破折號,因此它跨越的等級比一般連結多兩個

注意 渲染引擎可能仍會讓連結比要求的等級數更長,以容納其他要求。

當連結標籤寫在連結中間時,額外的破折號必須添加到連結的右側。以下範例與上一個範例等效

對於虛線或粗連結,要添加的字元是等號或點,如下表總結:

長度123
一般------------
帶箭頭的一般-->--->---->
============
帶箭頭的粗==>===>====>
虛線-.--..--...-
帶箭頭的虛線-.->-..->-...->

會破壞語法的特殊字元

可以將文字放在引號內,以便渲染更多有問題的字元。如下例所示

用於跳脫字元的實體代碼

可以使用此處範例所示的語法來跳脫字元。

給定的數字是十進位,因此 # 可以編碼為 #35;。也支援使用 HTML 字元名稱。

子圖

subgraph title
    graph definition
end

以下是一個範例

您也可以為子圖設定明確的 ID。

流程圖

對於圖表類型流程圖,也可以設定與子圖之間來回的邊線,如下面的流程圖所示。

子圖中的方向

使用圖表類型流程圖,您可以使用 direction 陳述式來設定子圖的渲染方向,如下例所示。

限制

如果子圖的任何節點連結到外部,則將忽略子圖方向。相反地,子圖將繼承父圖的方向

Markdown 字串

「Markdown 字串」功能透過提供更多通用的字串類型來增強流程圖和心智圖,此類型支援粗體和斜體等文字格式設定選項,並自動將文字包裝在標籤中。

格式設定

  • 對於粗體文字,請在文字前後使用雙星號(**)。
  • 對於斜體字,請在文字前後使用單星號(*)。
  • 使用傳統字串時,您需要新增 <br> 標籤,才能在節點中換行。但是,Markdown 字串會在文字過長時自動換行,並允許您僅使用換行字元而不是 <br> 標籤來開始新的一行。

此功能適用於節點標籤、邊線標籤和子圖標籤。

可以使用以下方式停用自動換行:

---
config:
  markdownAutoWrap: false
---
graph LR

互動

可以將點擊事件繫結到節點,點擊可以導向 JavaScript 回呼,或導向將在新瀏覽器索引標籤中開啟的連結。

資訊

當使用 securityLevel='strict' 時,此功能將停用,而當使用 securityLevel='loose' 時將啟用。

click nodeId callback
click nodeId call callback()
  • nodeId 是節點的 ID
  • callback 是在顯示圖表的頁面上定義的 JavaScript 函數名稱,呼叫該函數時會將 nodeId 作為參數。

以下是工具提示使用的範例

html
<script>
  window.callback = function () {
    alert('A callback was triggered');
  };
</script>

工具提示文字會以雙引號括住。工具提示的樣式由類別 .mermaidTooltip 設定。

成功 工具提示功能和連結到 URL 的功能可從 0.5.2 版開始使用。

?> 由於 Docsify 處理 JavaScript 回呼函數的方式有所限制,因此可以在 這個 jsfiddle 中查看上述程式碼的替代運作示範。

預設情況下,連結會在同一個瀏覽器索引標籤/視窗中開啟。可以透過在點擊定義中新增連結目標(支援 _self_blank_parent_top)來變更此設定

初學者提示 — 在 html 環境中使用互動式連結的完整範例

html
<body>
  <pre class="mermaid">
    flowchart LR
        A-->B
        B-->C
        C-->D
        click A callback "Tooltip"
        click B "https://www.github.com" "This is a link"
        click C call callback() "Tooltip"
        click D href "https://www.github.com" "This is a link"
  </pre>

  <script>
    window.callback = function () {
      alert('A callback was triggered');
    };
    const config = {
      startOnLoad: true,
      flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' },
      securityLevel: 'loose',
    };
    mermaid.initialize(config);
  </script>
</body>

註解

可以在流程圖中輸入註解,剖析器會忽略這些註解。註解需要位於它們自己的行上,並且必須以 %%(雙百分比符號)作為開頭。從註解開始到下一個換行符號之間的任何文字都會被視為註解,包括任何流程語法

樣式和類別

可以設定連結的樣式。例如,您可能想要設定在流程中向後移動的連結的樣式。由於連結沒有與節點相同的方式的 ID,因此需要一些其他方式來決定應該將哪些樣式附加到連結。不是使用 ID,而是使用連結在圖表中定義時的順序編號,或者使用 default 套用到所有連結。在以下範例中,在 linkStyle 陳述式中定義的樣式將屬於圖表中的第四個連結

linkStyle 3 stroke:#ff3,stroke-width:4px,color:red;

也可以透過使用逗號分隔連結編號,在單個陳述式中為多個連結添加樣式

linkStyle 1,2,7 color:blue;

設定線條曲線的樣式

如果預設方法不符合您的需求,可以設定項目之間線條使用的曲線類型樣式。可用的曲線樣式包括 basisbumpXbumpYcardinalcatmullRomlinearmonotoneXmonotoneYnaturalstepstepAfterstepBefore

在此範例中,由左至右的圖表使用 stepBefore 曲線樣式

%%{ init: { 'flowchart': { 'curve': 'stepBefore' } } }%%
graph LR

如需可用曲線的完整清單,包括自訂曲線的說明,請參閱 Shapes 文件中的 d3-shape 專案。

設定節點的樣式

可以將特定樣式(例如更粗的邊框或不同的背景顏色)套用到節點。

類別

比起每次都定義樣式,更方便的做法是定義樣式類別,然後將此類別附加到應該具有不同外觀的節點。

類別定義如下例所示

    classDef className fill:#f9f,stroke:#333,stroke-width:4px;

此外,也可以在一個語句中定義多個類別的樣式

    classDef firstClassName,secondClassName font-size:12pt;

將類別附加到節點的方式如下所示

    class nodeId1 className;

也可以在一個語句中將類別附加到節點列表

    class nodeId1,nodeId2 className;

添加類別的較短形式是使用 ::: 運算符將類別名稱附加到節點,如下所示

當宣告節點之間的多個連結時,可以使用這種形式

CSS 類別

也可以在 CSS 樣式中預先定義類別,然後從圖形定義中套用,如下例所示

範例樣式

html
<style>
  .cssClass > rect {
    fill: #ff0000;
    stroke: #ffff00;
    stroke-width: 4px;
  }
</style>

範例定義

預設類別

如果類別名稱為 default,則會將其分配給所有沒有特定類別定義的類別。

    classDef default fill:#f9f,stroke:#333,stroke-width:4px;

Font Awesome 的基本支援

可以從 Font Awesome 添加圖示。

圖示透過語法 fa:#圖示類別名稱# 存取。

如果網站包含 CSS,Mermaid 支援 Font Awesome。Mermaid 對於可以使用的 Font Awesome 版本沒有任何限制。

請參閱官方 Font Awesome 文件,了解如何在您的網站中包含它。

<head> 中添加此程式碼片段將會添加對 Font Awesome v6.5.1 的支援

html
<link
  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
  rel="stylesheet"
/>

自訂圖示

只要網站導入了相應的工具包,就可以使用 Font Awesome 提供的自訂圖示。

請注意,這目前是 Font Awesome 的付費功能。

對於自訂圖示,您需要使用 fak 前綴。

範例

flowchart TD
    B[fa:fa-twitter] %% standard icon
    B-->E(fak:fa-custom-icon-name) %% custom icon

並嘗試渲染它

  • 在圖形宣告中,語句現在也可以不以分號結尾。在 0.2.16 版發布後,以分號結束圖形語句只是可選的。因此,下面的圖形宣告與舊的圖形宣告一樣有效。

  • 頂點和連結之間允許一個空格。但是,頂點及其文字之間以及連結及其文字之間不應有任何空格。舊的圖形宣告語法也將起作用,因此這個新功能是可選的,引入它是為了提高可讀性。

以下是圖形邊緣的新宣告,它與舊的圖形邊緣宣告一樣有效。

設定

渲染器

圖表的佈局是透過渲染器完成的。預設渲染器是 dagre。

從 Mermaid 9.4 版開始,您可以使用名為 elk 的替代渲染器。elk 渲染器對於較大和/或更複雜的圖表更好。

elk 渲染器是一個實驗性功能。您可以透過添加此指令將渲染器更改為 elk

%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%

資訊

請注意,網站需要使用 mermaid 9.4+ 版本才能使其正常運作,並在延遲載入設定中啟用此功能。

寬度

可以調整渲染流程圖的寬度。

這可以透過定義 mermaid.flowchartConfig 或使用 CLI 搭配包含設定的 JSON 檔案來完成。如何在 mermaidCLI 頁面中描述如何使用 CLI。mermaid.flowchartConfig 可以設定為包含設定參數的 JSON 字串或相應的物件。

javascript
mermaid.flowchartConfig = {
    width: 100%
}