所謂「Markdown 語法」到底是什麼
Markdown 語法就是一組用標點符號標記純文字的慣例。行首放 # 代表標題,用星號包住文字代表強調,減號加空格代表清單項目。文件用純文字讀就通順,渲染器再把這些慣例轉成 HTML。
- 這個語言分成兩層:到處都能用的核心語法,以及支援度不一的擴充語法。
- 十個核心元素就涵蓋了絕大多數真實文件。
- 本頁只把每個元素點名一次,細節與邊角案例留在八篇元素指南裡。
- 東西沒有正確顯示時,問題通常出在目的地,而不是你打錯字。
核心語法:不會壞的那一層
核心語法是 John Gruber 在 2004 年推出、後來由 CommonMark 精確定義的那一套:標題、段落、強調、清單、連結、圖片、行內程式碼、引用區塊、分隔線。只要一個工具宣稱支援 Markdown,就一定支援這些。貼到 GitHub issue、Reddit 留言、靜態網站產生器或聊天框,結果都一樣。
擴充語法:後來才加,支援不齊
擴充語法是後來各家實作各自加上去的:表格、待辦清單、刪除線、註腳、帶語言標籤的圍欄程式碼區塊,以及像 GitHub 警示區塊這類單一平台的額外功能。
「支援度廣」不等於「全部支援」。在 README 裡完美的表格,貼到聊天訊息可能變成一整排管線符號,那並不是你的語法寫錯了。
真正該問的是「它會在哪裡被渲染」
所以該問的從來不只是「這個元素怎麼寫」,還要問「負責渲染的那個東西看不看得懂」。兩件事一起看,Markdown 就不再讓人意外。下面那張表一次回答兩個問題,一個元素一列。
每個元素怎麼寫、在哪裡有效
整個語言就在這一個畫面裡。把它當成這一群頁面的地圖:每一列點名一個元素,說明它是否到處安全,並把你送到深入說明它的那一頁。
完整元素對照表
| 元素 | 你要輸入 | 核心/擴充 | 完整說明 |
|---|---|---|---|
| 標題 | # H1 到 ###### H6 | 核心 | Markdown 標題 |
| 粗體 | **粗體** | 核心 | 粗體與斜體 |
| 斜體 | *斜體* | 核心 | 粗體與斜體 |
| 刪除線 | ~~刪除~~ | 擴充 | 粗體與斜體 |
| 符號清單 | - 項目 | 核心 | Markdown 清單 |
| 編號清單 | 1. 項目 | 核心 | Markdown 清單 |
| 待辦清單 | - [ ] 待辦 | 擴充 | Markdown 清單 |
| 連結 | [文字](https://example.com) | 核心 | Markdown 連結 |
| 圖片 |  | 核心 | Markdown 圖片 |
| 行內程式碼 | `程式碼` | 核心 | 程式碼區塊 |
| 程式碼區塊(縮排式) | 行首四個空格 | 核心 | 程式碼區塊 |
| 程式碼區塊(圍欄式) | 三個反引號,可加語言名稱 | 擴充,但幾乎全面支援 | 程式碼區塊 |
| 引用區塊 | > 引用的一行 | 核心 | 引用區塊 |
| 表格 | | a | b | 再加一列 --- | 擴充 | Markdown 表格 |
| 註腳 | 文字[^1] 再加 [^1]: 說明 | 擴充 | 註腳 |
| 分隔線 | 單獨一行 --- | 核心 | 語法速查表 |
有兩列需要補充說明
- 圍欄式程式碼區塊原本屬於擴充語法,但 CommonMark 已將它納入,實務上支援度接近百分之百,可以直接當成安全的元素使用。
- 四個空格的縮排式程式碼區塊屬於核心語法,這正是為什麼清單縮排過頭時,有時會莫名其妙冒出一塊你沒要求的灰底方框。
小提醒:先看第三欄,再看第四欄。知道一個元素屬於擴充語法,等於事先知道哪些平台會讓你失望,這比把語法背起來更省時間。
如果你要的是同樣的資訊、但不要旁邊那些說明文字,Markdown 語法速查表就是為列印與常駐分頁而做的版本。
值得照著走的學習順序
照筆畫排序對學習沒有幫助。下面這個順序之所以有效,是因為每一步都沿用上一步建立的心智模型,而且把每份文件都會用到的元素排在最前面。
先學結構,再學裝飾
從標題開始,因為結構優先於裝飾,也因為它帶出了「行首標記」這個概念,而語言的一半都靠它運作。接著讀粗體與斜體,那是成本最低的一次成功,同時教會你語言的另一半:成對的分隔符號包住文字,而不是從行首開始。
接著是真正承載內容的元素
第三順位是清單,因為縮排從這裡開始有意義,而巢狀清單通常是大家的 Markdown 第一次壞掉的位置。第四是連結,值得單獨花點注意力,因為中括號接小括號的寫法跟前面所有元素都不一樣。緊接著讀圖片:語法完全相同,只是前面多一個驚嘆號,等於白賺一個元素。
最後才是會「包住其他東西」的那幾個
第六是程式碼區塊,它不只是拿來放程式碼。圍欄裡的內容不會被解析,所以這是你唯一能談論 Markdown 符號而不觸發它們的方法。第七是引用區塊,它是第一個能包住其他區塊的結構,先知道那些區塊是什麼才學得順。註腳留到最後:它屬於擴充語法、分成引用與定義兩半,而且只有在長文件裡才划算。
這八篇走完,上表就只剩表格本身沒學到,而它有自己的專屬指南。如果你想把整個語言當成一篇連貫的文章讀完,Markdown 完整指南就是同樣的內容寫成一整篇。
最常出問題的是哪幾個元素
幾乎每一次「我的 Markdown 壞掉了」,都能追溯到底下五個元素之一。它們都不難寫,只是渲染器對它們的看法不一致。
五個慣犯
- 表格是頭號問題,而且遙遙領先:Discord、Slack、Teams 都不支援,匯入 Notion 時也不太可靠。
- 註腳來自 PHP Markdown Extra,不屬於核心語言。GitHub 遲至 2021 年才支援,純 CommonMark 剖析器至今仍會把中括號原樣印出來。
- 待辦清單在 GitHub、GitLab、Obsidian 上會變成核取方塊,在其他地方幾乎都只是兩個中括號。
- 刪除線在多數現代工具都能用,但雙波浪號不是核心語法,較舊的剖析器會直接忽略。
- 巢狀清單壞掉的原因不是支援度,而是縮排。兩格、三格、四格空白在不同剖析器眼中意義不同,Tab 與空白混用則會讓所有剖析器一起出錯。
先確認方言,再懷疑自己打錯
真正有用的一件知識,是搞清楚你的目標平台講哪一種方言。多數現代工具已經收斂到 GitHub 風格 Markdown,也就是 CommonMark 再加上表格、待辦清單、刪除線與自動連結,本站編輯器渲染的也是這一套。
該寫哪一種 Markdown 方言說明怎麼判斷眼前是哪一種,Markdown 平台總覽則附上逐一 App 的對照表。所以東西沒有正確渲染時,先問元素是不是擴充語法,再問目的地支援到哪裡。真的很少是打錯字。
怎麼練才記得住
Markdown 是用手指學的,不是用眼睛。讀語法清單只留下「看過的印象」,實際打字才會變成「想得起來的記憶」,而你在半夜十一點趕文件時需要的是後者。
用打的,不要用看的
一個分頁開著 Markdown 編輯器,另一個開著這一頁。打一個元素,看即時預覽確認結果,再換下一個。哪個符號沒照你想的方式運作,預覽會立刻告訴你,這是最快的修正循環。
兩個值得交給工具的結構
注意:不要對著渲染後的畫面學語法。照抄一個標題「看起來的樣子」,學不到當初打了什麼。永遠把原始碼與預覽並排比對。
其餘的免費 Markdown 工具負責雙向轉換。語法練進手裡之後,剩下的變數就是你要發佈到哪裡,那正是 Markdown 平台總覽要處理的問題;想知道這麼小的語言為什麼會無所不在,就看什麼是 Markdown。
相容性資料驗證日期
常見問題
Markdown 總共有幾個語法元素?
大約十五個。其中十個屬於核心語法,在任何渲染器都能用:標題、粗體、斜體、符號清單、編號清單、連結、圖片、行內程式碼、引用區塊與分隔線。其餘五個是擴充語法:表格、待辦清單、刪除線、註腳與圍欄式程式碼區塊。
核心語法與擴充語法差在哪裡?
核心語法是 2004 年的原始 Markdown,後來由 CommonMark 精確定義,到哪裡都安全。擴充語法是各家實作後來自行加上的,支援度因工具而異。最廣泛採用的擴充組合請見 GitHub 風格 Markdown。
我需要把所有 Markdown 語法都學會嗎?
不用。標題、粗體、清單、連結、程式碼就涵蓋了絕大多數真實文件。表格與註腳等真的需要時再學。上面的順序是刻意排的,在任何一步停下來,學到的都已經夠用。
為什麼我的表格或註腳沒有正確顯示?
幾乎可以確定是目的地不支援,而不是你寫錯。兩者都屬於擴充語法,所以 Discord、Slack、Teams 與純 CommonMark 剖析器會直接忽略。先確認目標平台,再檢查是不是少了分隔列或區塊前的空行。
延伸閱讀
立即使用編輯器
立即使用編輯器