基本表格

表格是 Markdown 里最老实的一种语法:没有缩写,没有嵌套,整套规则就是「表头行 + 分隔行 + 数据行」。但也正因为规则少,它出问题时不会给你提示——竖线少写一个,整段就悄悄塌成普通文字。这一页讲清表格的成立条件、列数规则和单元格里的转义,让你看到源码就能判断它会不会渲染成表格。

基本写法

表格由表头行、分隔行、数据行组成。表头和数据行用竖线分列,分隔行声明「从这里往下都是数据」:

| 列1 | 列2 | 列3 |
| --- | --- | --- |
| A   | B   | C   |
| 1   | 2   | 3   |
<table>
<thead>
<tr>
<th>列1</th>
<th>列2</th>
<th>列3</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</tbody>
</table>

分隔行的每格只能由短横线组成,可选的冒号用来指定对齐方向。短横线一个就够,三个只是最常见的写法。

竖线不必写在行首行尾

每行开头和结尾的竖线都可省略。下面这种写法渲染结果和上面一样:

列1 | 列2 | 列3
--- | --- | ---
A   | B   | C
1   | 2   | 3
<table>
<thead>
<tr>
<th>列1</th>
<th>列2</th>
<th>列3</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</tbody>
</table>

一列也能成表

表格的最小形态只有两行一列,「至少要三根竖线」并不是门槛:

| 状态 |
| --- |
| 正常 |
<table>
<thead>
<tr>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr>
<td>正常</td>
</tr>
</tbody>
</table>

列数规则

表格最常见的失败不是语法写错,而是列数对不上。判定规则只有一条:分隔行的格子数必须和表头行一致,否则整段不会被当成表格,会原样显示成几行文字。

数据行和表头对不上时表格不会消失:多出来的格子被丢弃,少掉的补成空单元格。

| a | b |
| --- | --- |
| 1 | 2 | 3 |
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
</tr>
</tbody>
</table>
| a | b | c |
| --- | --- | --- |
| 1 | 2 |
<table>
<thead>
<tr>
<th>a</th>
<th>b</th>
<th>c</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td></td>
</tr>
</tbody>
</table>

而分隔行和表头对不上时,表格整个不成立:

| a | b |
| --- |
| 1 | 2 |
<p>| a | b |
| --- |
| 1 | 2 |</p>

单元格里的内容

单元格里的内容按行内语法解析:粗体、斜体、行内代码都能用。

| 命令 | 用途 |
| --- | --- |
| `pnpm install` | 安装**全部**依赖 |
<table>
<thead>
<tr>
<th>命令</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>pnpm install</code></td>
<td>安装<strong>全部</strong>依赖</td>
</tr>
</tbody>
</table>

但竖线不行。它是分隔符,出现在单元格里必须转义成 \|:

| 表达式 | 说明 |
| --- | --- |
| `a \| b` | 转义后的竖线 |
<table>
<thead>
<tr>
<th>表达式</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>a | b</code></td>
<td>转义后的竖线</td>
</tr>
</tbody>
</table>

常见坑

写法实际渲染原因
分隔行和表头列数不同不是表格整段退化成文字
数据行比表头多一格多出的格子被丢弃以表头列数为准
数据行比表头少一格补一个空单元格以表头列数为准
单元格里的竖线不转义这一行被拆成多列竖线是分隔符
单元格里的竖线先转义竖线原样显示转义先于分列
表头与分隔行之间空一行不是表格分隔行必须紧邻表头

练习

把下面这段内容改写成 Markdown 表格:三列,表头是命令、参数、说明;命令和参数用行内代码;说明列两处用粗体;第二行参数里有一根竖线,要保证它原样显示而不是拆开这一行。

命令 pnpm install
参数 --frozen-lockfile
说明 按锁文件严格安装

命令 pnpm publish
参数 --access public | --tag latest
说明 发布到 npm 公共源
竖线转义

解题思路: 表格成立要一行表头、紧跟着格子数相同的分隔行、再是数据行。分隔行的格子里只写短横线即可,冒号留给列对齐,本题用不上。难点在第二行:参数 --access public | --tag latest 里有一根竖线,必须转义成 \|,否则这一行会被拆成三列,表格就塌了。

详细步骤:

  1. 写表头行 | 命令 | 参数 | 说明 |,共三列。
  2. 紧接着写分隔行 | --- | --- | --- |,同样是三格,且必须紧挨着表头,中间不能空行。
  3. 第一条数据行:命令写成行内代码 pnpm install,参数写成行内代码 --frozen-lockfile,说明用 **按锁文件严格安装** 加粗。
  4. 第二条数据行:命令写成行内代码 pnpm publish;参数里的竖线转义成 \|,即行内代码 --access public \| --tag latest;说明用 **发布到 npm 公共源** 加粗。
  5. 检验:渲染后是一个三列两行的表格,第二行参数里的竖线原样显示,没有把这一行拆开。

最终答案:

| 命令 | 参数 | 说明 |
| --- | --- | --- |
| `pnpm install` | `--frozen-lockfile` | **按锁文件严格安装** |
| `pnpm publish` | `--access public \| --tag latest` | **发布到 npm 公共源** |

小结

读完这一页,你应当能说出表格成立的三个条件,能判断一段源码会不会渲染成表格,能解释列数对不上时多出的格子为什么被丢弃、少掉的为什么补成空格,也能解释单元格里那根竖线为什么必须转义。

发现内容有问题?

告诉我们哪里需要改进。