Markdown 表格和任务列表怎么写

工具相关 ·

基础 Markdown 语法只有标题、加粗、列表、链接这几样,但写文档时真正高频的需求——做一张对照表、列一份待办清单——在基础语法里没有对应写法。这些能力来自 GFM(GitHub Flavored Markdown)扩展。它们用起来不难,但有几个细节不注意就会渲染失败。

表格的写法

Markdown 表格由三部分组成:表头行、分隔行、数据行。

| 列 1 | 列 2 |
| --- | --- |
| 内容 | 内容 |

第一行是表头,用 | 分隔各列。第二行是分隔行,用来告诉解析器「上面那行是表头」,同时定义对齐方式。从第三行开始是数据行。

最容易出错的地方是分隔行不能省略。有些人只写表头和数据行,跳过分隔行,结果整块内容不会被识别为表格,而是被渲染成普通段落。

另一个常见错误是列数不一致。如果表头有 3 列而数据行只有 2 列,不同解析器的处理方式不同——有的补空列,有的直接不渲染表格。所以每行的列数必须保持一致。

最后一行之后是否需要空行?建议留一个空行,这样表格与后续内容之间有明确的分隔。紧跟着其他内容时,部分解析器可能把后续内容也当作表格行处理。

对齐方式怎么控制

对齐是在分隔行里用冒号控制的。

| 左对齐 | 居中 | 右对齐 |
| :--- | :---: | ---: |
| 内容 | 内容 | 内容 |

: 放在左边表示左对齐,两边都有表示居中,放在右边表示右对齐,都没有表示使用默认对齐(通常是左对齐)。

右对齐在展示数字时很有用,因为数字按右对齐排列时位数容易对齐,便于比较大小。居中对齐适合短的标签类内容。

需要说明的是,对齐只影响渲染后的排版,不影响源码的书写。源码里的空格数量与对齐无关,不需要为了「看起来整齐」而在源码里手工对齐竖线。

任务列表的写法

任务列表是在无序列表的基础上加方括号:

- [ ] 待办事项
- [x] 已完成事项

方括号里是空格表示未完成,是 x 表示已完成。渲染后会出现一个复选框。

这里有几个细节需要注意。

第一,方括号里必须是空格或 x,不能留空。写 - [] 不会被识别为任务列表。

第二,中括号和内容之间要有空格。- [ ]待办 有些解析器能识别,有些不识别,加上空格最稳妥。

第三,方括号必须紧跟在列表符号后面。写成 - 说明 [ ] 待办 不会被识别为任务列表,因为方括号不在列表项的开头位置。

关于可点击的复选框

在渲染结果里,任务列表的复选框通常是可以点击的。但这里有一个容易被误解的地方:点击复选框只是视觉上的变化,不会同步修改 Markdown 源码。

所以如果在一个在线编辑器里点了复选框,然后导出源码,会发现源码里的 [ ] 仍然是 [ ],没有被改成 [x]。要真正改变状态,必须手动编辑源码。

这个限制来自渲染的机制——预览区显示的是渲染后的 HTML,源码是另一份数据,两者之间没有双向绑定。有些工具会实现这个同步,但多数不会。

表格里的内容限制

表格单元格里的内容支持行内语法,比如加粗、行内代码、链接。

但有几样东西不能放在单元格里:换行*和*块级元素。也就是说,一个单元格里不能有多行文字,也不能放列表或代码块。如果需要表达多行内容,通常的做法是用 <br> 标签,或者改用其他结构(比如用列表代替表格)。

单元格里如果要放竖线字符本身,需要转义成 |,否则会被当作列分隔符,导致列数错乱。

检查清单

  • 表格由表头行、分隔行、数据行三部分组成,分隔行不能省略
  • 每行的列数必须一致,否则可能整块不渲染
  • 用冒号控制对齐:左边冒号左对齐,两边居中,右边右对齐
  • 任务列表写成 - [ ] 或 - [x],方括号里必须是空格或 x
  • 方括号要紧跟列表符号,且与内容之间留一个空格
  • 预览里点击复选框不会同步修改源码,要改状态需手动编辑
  • 单元格里不能换行或放块级元素,竖线字符需转义为 |
阅读 12