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 原生支援
GitLabGitLab Flavored Markdown
Discord只支援 ~~
Typora即時預覽編輯器,支援最好
VS Code(內建預覽)需要啟用 GFM 解析
Obsidian
簡書⚠️~~ 正常,HTML 標籤可能被過濾
CSDN⚠️類似簡書,HTML 標籤有時不生效
Stack Exchange 問答問答區用 HTML,聊天區用 ---text---
Reddit2023 年後支援
Slack不支援刪除線
飛書文件

有一次我在一個舊版本的靜態網站產生器裡用 ~~,怎麼都不生效,排查了半天才发现它用的是 CommonMark 解析器,預設不包含 GFM 擴充功能。遇到這種情況,換 <del> 標籤就行。

巢狀格式:刪除線 + 粗體 / 斜體

Markdown 的刪除線可以和其他格式組合使用,這在實際場景中還蠻常見的。

刪除線 + 粗體

**~~重要但已過時的資訊~~**
~~**重要但已過時的資訊**~~

兩種寫法效果一樣:粗體的刪除線文字

刪除線 + 斜體

*~~斜體刪除線~~*
~~*斜體刪除線*~~

效果:~~斜體刪除線~

刪除線 + 粗體 + 斜體

***~~全部格式組合~~***
~~***全部格式組合***~~

效果:~~全部格式組合~

組合使用的時候,注意讓符號正確巢狀配對。~~**text**~~**~~text~~** 都可以,但 ~~**text~~** 這種交叉寫法會導致渲染異常。

刪除線的實際應用場景

了解了語法之後,來看看在哪些場景下刪除線特別好用。

價格對比:電商、SaaS 產品頁面最常見

| 套餐 | 原價 | 優惠價 |
|------|------|--------|
| 基礎版 | ~~¥99/月~~ | ¥49/月 |
| 專業版 | ~~¥199/月~~ | ¥99/月 |

文件修訂:標註哪些內容已更新

配置項 `max_connections` 預設值 ~~100~~ 200(v2.0 起變更)。

TODO 管理:在純文字待辦事項中標記已完成

- ~~完成需求分析~~
- ~~編寫技術方案~~
- 開發核心功能
- 測試與上線

這種寫法在 GitHub Issue 和 Obsidian 筆記裡特別好用,比 checkbox 更適合「已完成但想保留記錄」的場景。

糾錯標註:在文章或討論中糾正錯誤資訊

地球是 ~~平的~~ 球形的。

常見問題

為什麼我的刪除線不生效?

最常見的原因有三個:

  1. 只寫了一個波浪線。刪除線是 ~~(兩個),不是 ~(一個)。
  2. 波浪線和文字之間有空格~~ 文字 ~~ 在部分解析器裡不生效。
  3. 你用的編輯器不支援 GFM 擴充功能。換用 <del> 標籤試試。

程式碼區塊裡能用刪除線嗎?

不能直接用。Markdown 的格式化語法(包括刪除線)在程式碼區塊(```` )內是不生效的,這是設計如此。

如果一定要在程式碼相關內容中表示「刪除」,可以用 diff 語法區塊來模擬:

```diff
- 舊的程式碼行(紅色)
+ 新的程式碼行(綠色)

這在 GitHub 上特別常用,雖然視覺效果不是刪除線,但語義上更準確——清楚地展示了「刪了什麼、加了什麼」。

### 刪除線和醒目提示有什麼區別?

刪除線(`~~text~~`)是在文字中間畫橫線,表示「已廢棄」。醒目提示(`==text==`)是用背景色標記文字,表示「重點注意」。兩者用途完全不同,別搞混了。

### 表格裡能用刪除線嗎?

能用。在 Markdown 表格的儲存格中正常使用 `~~` 即可:

```markdown
| 功能 | 狀態 |
|------|------|
| ~~使用者註冊~~ | 已遷移到新系統 |
| 資料匯出 | 正常 |

不過要注意,少數 Markdown 解析器在表格內對 ~~ 的支援不太好。如果遇到這種情況,用 <del> 標籤替代。

速查表

寫法效果備註
~~文字~~文字GFM 標準寫法
<del>文字</del>文字HTML 語義化方案
<s>文字</s>文字HTML 非準確資訊
~~**文字**~~文字刪除線 + 粗體

說實話語法本身沒幾行,但要踩的坑都在平台相容性裡。記住兩點就夠:用 ~~ 時不加空格,不行就換 <del>,基本能覆蓋所有場景。

參考來源