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>,基本能覆盖所有场景。

参考来源