Markdown 刪除線
Markdown 刪除線是什麼
刪除線(strikethrough)就是在文字中間畫一條橫線,表示這段文字「已廢棄」或「不再有效」。你在編輯文件、寫 README、記筆記的時候經常會用到它——比如標註舊價格、標記已完成的任務、或者糾正之前寫錯的內容。
在 Markdown 裡,刪除線不算是「基礎語法」。原始的 Markdown 規範(John Gruber 在 2004 年設計的那個版本)並沒有定義刪除線的寫法。後來 GitHub Flavored Markdown(簡稱 GFM)把它加了進來,用的符號是兩個波浪線 ~~。由於 GFM 的影響力實在太大,現在全球幾乎所有的 Markdown 編輯器和平台都支援這個寫法了。
基本語法:用 ~~ 包裹文字
寫法很簡單,在要劃掉的文字前後各加兩個波浪線:
~~這段文字會被加上刪除線~~渲染效果:這段文字會被加上刪除線
你可以把它用在一個詞、一句話、甚至一整段上:
原價 ~~999元~~,現在只要 499 元!
~~這個方案已經被否決了,不要參考。~~ 新方案見下方。
會議時間 ~~週二下午3點~~ 改為週三上午10點。幾個需要注意的細節:
- 波浪線和文字之間不要加空格。
~~ 文字 ~~在某些解析器裡會失效,直接變成普通文字。 - 一個波浪線
~是 subscript(下標)語法,不是刪除線,必須是兩個。 - 刪除線可以跨行使用,但建議保持在一行內,這樣相容性最好。
HTML 替代方案
如果你的編輯器或平台不支援 ~~ 語法(這種情況現在比較少見了),可以用 HTML 標籤來實現:
<del>這段文字也有刪除線效果</del>
<s>這個也能劃掉</s>
<strike>這是最舊的寫法,但很多地方還能用</strike>這三個標籤的視覺效果差不多,但語義上有區別:
| 標籤 | 語義 | 適用場景 |
|---|---|---|
<del> | 表示「已被刪除的內容」 | 文件修訂、價格變更 |
<s> | 表示「不再準確/不再相關的內容」 | 標註過期資訊 |
<strike> | HTML5 已廢棄,純視覺效果 | 不建議使用 |
說實話,實際使用中 <del> 和 <s> 的區別對大多數人來說無所謂。但如果你在意語義化(比如 SEO 或者螢幕閱讀器),<del> 是更規範的選擇,它還能配合 datetime 屬性標註刪除時間:
<del datetime="2026-05-01">舊版本描述</del>另外,CSS 的 text-decoration: line-through 也能實現同樣的效果,但這需要你控制頁面的樣式,在純 Markdown 檔案裡用得不多。
不同平台的相容性
這一塊是很多人踩坑的地方。~~ 雖然是事實標準,但不同平台的支援程度確實有差異。我分別在幾個常用平台上測試過,整理了一個對照表:
| 平台/編輯器 | ~~ 語法 | <del> 標籤 | 備註 |
|---|---|---|---|
| GitHub(README、Issue、PR) | ✅ | ✅ | GFM 原生支援 |
| GitLab | ✅ | ✅ | GitLab Flavored Markdown |
| Discord | ✅ | ❌ | 只支援 ~~ |
| Typora | ✅ | ✅ | 即時預覽編輯器,支援最好 |
| VS Code(內建預覽) | ✅ | ✅ | 需要啟用 GFM 解析 |
| Obsidian | ✅ | ✅ | |
| 簡書 | ✅ | ⚠️ | ~~ 正常,HTML 標籤可能被過濾 |
| CSDN | ✅ | ⚠️ | 類似簡書,HTML 標籤有時不生效 |
| Stack Exchange 問答 | ❌ | ✅ | 問答區用 HTML,聊天區用 ---text--- |
| ✅ | ❌ | 2023 年後支援 | |
| Slack | ❌ | ❌ | 不支援刪除線 |
| 飛書文件 | ✅ | ✅ |
有一次我在一個舊版本的靜態網站產生器裡用 ~~,怎麼都不生效,排查了半天才发现它用的是 CommonMark 解析器,預設不包含 GFM 擴充功能。遇到這種情況,換 <del> 標籤就行。
巢狀格式:刪除線 + 粗體 / 斜體
Markdown 的刪除線可以和其他格式組合使用,這在實際場景中還蠻常見的。
刪除線 + 粗體:
**~~重要但已過時的資訊~~**
~~**重要但已過時的資訊**~~兩種寫法效果一樣:粗體的刪除線文字
刪除線 + 斜體:
*~~斜體刪除線~~*
~~*斜體刪除線*~~效果:~~斜體刪除線~
刪除線 + 粗體 + 斜體:
***~~全部格式組合~~***
~~***全部格式組合***~~效果:~~全部格式組合~
組合使用的時候,注意讓符號正確巢狀配對。~~**text**~~ 和 **~~text~~** 都可以,但 ~~**text~~** 這種交叉寫法會導致渲染異常。
刪除線的實際應用場景
了解了語法之後,來看看在哪些場景下刪除線特別好用。
價格對比:電商、SaaS 產品頁面最常見
| 套餐 | 原價 | 優惠價 |
|------|------|--------|
| 基礎版 | ~~¥99/月~~ | ¥49/月 |
| 專業版 | ~~¥199/月~~ | ¥99/月 |文件修訂:標註哪些內容已更新
配置項 `max_connections` 預設值 ~~100~~ 200(v2.0 起變更)。TODO 管理:在純文字待辦事項中標記已完成
- ~~完成需求分析~~
- ~~編寫技術方案~~
- 開發核心功能
- 測試與上線這種寫法在 GitHub Issue 和 Obsidian 筆記裡特別好用,比 checkbox 更適合「已完成但想保留記錄」的場景。
糾錯標註:在文章或討論中糾正錯誤資訊
地球是 ~~平的~~ 球形的。常見問題
為什麼我的刪除線不生效?
最常見的原因有三個:
- 只寫了一個波浪線。刪除線是
~~(兩個),不是~(一個)。 - 波浪線和文字之間有空格。
~~ 文字 ~~在部分解析器裡不生效。 - 你用的編輯器不支援 GFM 擴充功能。換用
<del>標籤試試。
程式碼區塊裡能用刪除線嗎?
不能直接用。Markdown 的格式化語法(包括刪除線)在程式碼區塊(` 或 ``` )內是不生效的,這是設計如此。
如果一定要在程式碼相關內容中表示「刪除」,可以用 diff 語法區塊來模擬:
```diff
- 舊的程式碼行(紅色)
+ 新的程式碼行(綠色)
這在 GitHub 上特別常用,雖然視覺效果不是刪除線,但語義上更準確——清楚地展示了「刪了什麼、加了什麼」。
### 刪除線和醒目提示有什麼區別?
刪除線(`~~text~~`)是在文字中間畫橫線,表示「已廢棄」。醒目提示(`==text==`)是用背景色標記文字,表示「重點注意」。兩者用途完全不同,別搞混了。
### 表格裡能用刪除線嗎?
能用。在 Markdown 表格的儲存格中正常使用 `~~` 即可:
```markdown
| 功能 | 狀態 |
|------|------|
| ~~使用者註冊~~ | 已遷移到新系統 |
| 資料匯出 | 正常 |不過要注意,少數 Markdown 解析器在表格內對 ~~ 的支援不太好。如果遇到這種情況,用 <del> 標籤替代。
速查表
| 寫法 | 效果 | 備註 |
|---|---|---|
~~文字~~ | GFM 標準寫法 | |
<del>文字</del> | HTML 語義化方案 | |
<s>文字</s> | HTML 非準確資訊 | |
~~**文字**~~ | 刪除線 + 粗體 |
說實話語法本身沒幾行,但要踩的坑都在平台相容性裡。記住兩點就夠:用 ~~ 時不加空格,不行就換 <del>,基本能覆蓋所有場景。
參考來源
- GitHub Flavored Markdown Spec — Strikethrough:GFM 官方規範中刪除線擴充功能的正式定義
- GitHub Docs — Basic Writing and Formatting Syntax:GitHub 官方文件對刪除線語法的說明
- Markdown Guide — Extended Syntax:Markdown Guide 對刪除線作為擴充語法的介紹
- CommonMark Spec:CommonMark 規範(說明基礎 Markdown 不包含刪除線)
- Wikipedia — Strikethrough:刪除線的歷史背景、HTML 標籤演進和 Unicode 實作方案