Markdown 语法速查表

Markdown 的语法不多,但总有那么几个记不住:表格怎么对齐、代码块怎么高亮、任务列表的方括号里写什么。本页把常用语法与 GitHub 扩展语法分别列成对照表,随查随用。

原理解析

Markdown 是轻量标记语言,用纯文本符号表达标题(#)、列表(-/*)、强调(粗/*斜*)、代码( / ```)、链接与表格,再渲染成 HTML。它让人专注内容而非排版。

不同实现有方言差异:CommonMark 是基线,GitHub 的 GFM 额外支持任务列表、删除线、自动表格等。同一份源文件在不同渲染器下可能外观略有出入,关键语法(标题/列表/代码块)则高度一致。

什么时候该查这张表

这张表在你要快速查某个 Markdown 元素的写法时有用。它按「效果 → 写法 → 说明」对照,覆盖标题、强调、列表、引用、代码、表格、链接、图片、分隔线等。写 README 或文档时查它。

不该查的情况:你在设计文档的信息架构、写内容本身、或做 Markdown 风格指南。语法只是表达手段,文档的价值在内容与结构。

判断标准:注意语法是行内还是块级。行内元素(强调、行内代码)用一对标记包裹,块级元素(列表、引用、代码块、表格、分隔线)需要独占行。写的时候发现不生效,先确认是不是这两种情况搞混了。

特别注意兼容性差异:表格不是 CommonMark 标准(GitHub 扩展),不同渲染器支持程度不同;~~删除线~~ 同理;行内代码里含反引号需要用双反引号包裹。写 README 时优先用最基础的语法。

边界与常见陷阱

  • 行内元素与块级元素混用是 Markdown 最常见的失败原因

    规则简单但常被忽略:行内元素(「强调」、「代码」、「链接」)必须紧贴文字,中间不能有空行;块级元素(列表、「引用」、代码块、表格、分隔线)前面必须有空行,否则会被当成上一段的延续。典型症状:列表紧跟在段落后会变成段落的一部分;引用里嵌套图片变成纯文本。写完检查一遍空行即可发现。

  • 列表的缩进决定嵌套层级,差一个空格就变同级

    嵌套列表要用 2–4 个空格(多数解析器认 2,紧随父列表内容对齐更稳),超出后渲染成代码块。常见错误:子项用 1 个空格(CommonMark 下可能正确,但 GitHub 与其他渲染器行为不一致)→ 改为 2 空格;或子项缩进比父项多 4 个以上 → 变成代码块。另一个坑是有序列表的序号:连续列表项即使不写序号,多数渲染器也会自动编号,但混用不同起始序号会在部分渲染器下重排。

  • 表格与删除线不是标准语法,跨平台会失效

    CommonMark 核心规范不含表格,也不含 「删除线」,它们是 GitHub 扩展。后果:某些编辑器、文档平台、静态站点生成器渲染不出表格(原文与竖线会裸露出来),或删除线显示成字面的两个波浪号。策略:文档站(GitHub/GitLab)放心用;对外发布或要兼容多种渲染器时,表格改用列表或图片,删除线改用「旧内容(已废弃)」的替代写法。

与相邻内容的分工

要预览 Markdown 渲染效果,用站内 Markdown 相关工具;本页是语法对照表。

要对比 CommonMark 与 GFM 的规范差异,属 Markdown 规范文档范畴,本表只标注实用点。

要设计文档结构(README、API 文档、变更日志的组织方式),属写作方法论范畴,本表不覆盖。

若目的是解决某个平台的渲染异常,先确认那个平台支持哪些扩展语法,不要用本页的通用假设。

实战片段

要点:① 行内元素(强调、行内代码、链接)必须紧贴文字,块级元素(列表、引用、代码块、表格、分隔线)前面必须有空行 —— 这是 Markdown 不生效的最常见原因;② 嵌套列表用 2–4 个空格,1 个空格在不同渲染器下行为不一致,超过 4 个会变成代码块;③ 表格与删除线不是 CommonMark 标准而是 GitHub 扩展,对外发布前要确认目标平台支持,否则原文符号会裸露;④ 行内代码含反引号要用双反引号包裹;⑤ Markdown 里的特殊字符需要反斜杠转义,否则会被误解析。

<!-- ① 行内元素:紧贴文字,中间不能有空行 -->
这是 **粗体**、这是 *斜体*、这是 ~~删除线~~(非标准)、这是 <code>行内代码</code>。

<!-- ② 块级元素:前面必须有空行 -->
段落一。

- 列表项 A
- 列表项 B
  - 嵌套项(用 2 个空格,不要用 1 个)
    - 再嵌套(不要超过 4 个空格,否则变代码块)

> 引用块
> 第二行
>
> > 嵌套引用

<!-- ③ 代码块:围栏写法是三反引号加语言名;缩进写法是 4 个空格 -->
    function demo() {
      return 1
    }

<!-- ④ 行内代码含反引号时用双反引号包裹 -->
    <code>&#96; &#96;&#96;code&#96;&#96; &#96;</code>

<!-- ⑤ 表格(非 CommonMark 标准) -->
| 语法 | 效果 | 说明 |
| --- | --- | --- |
| **粗体** | 粗体 | 行内元素 |
| [链接](url) | 链接 | 行内元素 |

<!-- ⑥ 链接与图片 -->
[站内链接](/tools.html)
[带 title 的链接](/tools.html "鼠标悬停提示")
![图片 alt](/img/chart.png "图表说明")

<!-- ⑦ 水平线(三连以上减号) -->
---

<!-- ⑧ 转义特殊字符 -->
*不是斜体*  # 不是标题  [不是链接]

<!-- ⑨ 兼容性检查清单(对外发布前) -->
<!-- 基础语法:标题/强调/列表/引用/代码/链接/图片/分隔线 -->
<!-- 扩展语法:表格、删除线、任务列表、emoji 短代码 -->
<!-- 目标平台不支持扩展语法时,原文符号会裸露出来 -->

<!-- 说明:代码块刻意用 4 空格缩进而非围栏 —— 围栏本身就是反引号,
     无法在反引号模板串里自举;行内代码用 code 标签同理。 -->

实践注解

  • 列表项之间空行会改变解析结果紧密列表与宽松列表在 HTML 输出上不同(是否包 <p>)。同一份 Markdown 在不同解析器(CommonMark、GitHub、MDX)下可能产出不同 DOM,做样式覆盖时要针对实际渲染结构而不是凭印象写选择器。
  • 表格单元格内的竖线必须转义包含 | 的内容会提前结束单元格,需要用 \| 转义。同理单元格内不能直接换行,要换行需用 <br>,而部分解析器允许的 HTML 白名单又不同,跨平台渲染要格外注意。
  • 缩进 4 空格是代码块,不是缩进层级在列表里继续缩进 4 个空格会被解释成代码块,导致「明明对齐了却渲染成代码」。列表内嵌套内容需要与标记符宽度对齐(通常 2–3 空格)。

数据来源

  • CommonMark specification
  • GitHub Flavored Markdown specification

上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。

常用语法

效果写法说明
标题# H1 … ###### H6六级标题,# 后需空格
粗体**粗体**加粗文字
斜体*斜体*倾斜文字
粗斜体***两者***同时加粗倾斜
删除线~~删除线~~划掉的文字
无序列表- 项目圆点列表,可嵌套缩进
有序列表1. 项目自动编号列表
引用> 引用左侧竖线的引用块
行内代码`code`等宽字体的代码片段
代码块```语言带语言标注的高亮块
链接[文字](url)可点击的超链接
图片![说明](url)嵌入图片
分割线---一条水平分隔线

GitHub 扩展语法

语法写法说明
表格| 列 A | 列 B | | --- | --- | | 1 | 2 |分隔行决定对齐,见下方说明
任务列表- [x] 已完成 - [ ] 未完成方括号内加 x 表示勾选
自动链接https://example.com裸 URL 自动识别为链接
表格左对齐| :--- |分隔行左侧加冒号
表格居中| :---: |分隔行两侧都加冒号
表格右对齐| ---: |分隔行右侧加冒号

常见问题

Markdown 和富文本编辑器有什么区别?

核心区别是可读性与控制权。Markdown 是纯文本加轻量标记,即使不渲染也能直接读懂,可以用任何编辑器打开,天然适合版本控制——Git 能清晰地显示每一次改动的差异,而富文本的二进制或复杂格式几乎无法做代码审查。代价是排版自由度低,复杂的图文混排做不了。反过来富文本所见即所得,排版能力强,但内容与样式耦合,迁移和协作成本高。技术文档、README、博客草稿适合 Markdown;营销页、复杂排版的海报适合富文本。

Markdown 表格怎么设置列对齐?

靠表头下面那一行分隔线控制。分隔线默认左对齐;在左边加冒号写作 :--- 是左对齐;两边都加冒号 :---: 是居中;右边加冒号 ---: 是右对齐。冒号的位置直接对应列的对齐方向,这是最直观的记法。要注意的是,分隔行里至少要有一个连字符,多写几个也无所谓,但整行的列数必须与表头一致,否则表格不会被识别。

代码块怎么写才能高亮?

用三个反引号包裹,并在开头的反引号后面紧跟语言标识符,比如 ``python 或 ``javascript。这个标识符告诉渲染器用哪种语法规则上色,写错或漏写就只会渲染成普通的等宽文本块。如果代码里本身含有反引号,可以用更多个反引号包裹来解决,比如用四个反引号包住含三个反引号的内容。只写单个词或短表达式时用一对单反号做行内代码即可。

Markdown 能直接导出成 PDF 或 Word 吗?

Markdown 本身只是文本格式,没有导出能力,需要借助工具链。最常见的是先转成 HTML 再打印或转 PDF,静态站点生成器、编辑器插件和命令行工具都能完成这一步;转 Word 一般也要先转 HTML 或 DOCX 中间格式。实际差别主要在样式上:默认转换出来的 PDF 样式朴素,想要好看需要自定义 CSS。如果最终交付物必须是排版精美的 PDF,直接用排版工具可能比走 Markdown 更省事。