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>` ``code`` `</code>
<!-- ⑤ 表格(非 CommonMark 标准) -->
| 语法 | 效果 | 说明 |
| --- | --- | --- |
| **粗体** | 粗体 | 行内元素 |
| [链接](url) | 链接 | 行内元素 |
<!-- ⑥ 链接与图片 -->
[站内链接](/tools.html)
[带 title 的链接](/tools.html "鼠标悬停提示")

<!-- ⑦ 水平线(三连以上减号) -->
---
<!-- ⑧ 转义特殊字符 -->
*不是斜体* # 不是标题 [不是链接]
<!-- ⑨ 兼容性检查清单(对外发布前) -->
<!-- 基础语法:标题/强调/列表/引用/代码/链接/图片/分隔线 -->
<!-- 扩展语法:表格、删除线、任务列表、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) | 可点击的超链接 |
| 图片 |  | 嵌入图片 |
| 分割线 | --- | 一条水平分隔线 |
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 更省事。