基本表格
表格是 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>
转义竖线的规则先于行内解析生效,所以行内代码里的竖线也得转义。 下面这行源码看起来是在单元格里放了段代码,实际上竖线把它拆成两列,代码也被拦腰截断:
| 写法 | 说明 |
| --- | --- |
| `a | b` | 竖线没有转义 || 写法 | 实际渲染 | 原因 |
|---|---|---|
| 分隔行和表头列数不同 | 不是表格 | 整段退化成文字 |
| 数据行比表头多一格 | 多出的格子被丢弃 | 以表头列数为准 |
| 数据行比表头少一格 | 补一个空单元格 | 以表头列数为准 |
| 单元格里的竖线不转义 | 这一行被拆成多列 | 竖线是分隔符 |
| 单元格里的竖线先转义 | 竖线原样显示 | 转义先于分列 |
| 表头与分隔行之间空一行 | 不是表格 | 分隔行必须紧邻表头 |
把下面这段内容改写成 Markdown 表格:三列,表头是命令、参数、说明;命令和参数用行内代码;说明列两处用粗体;第二行参数里有一根竖线,要保证它原样显示而不是拆开这一行。
命令 pnpm install
参数 --frozen-lockfile
说明 按锁文件严格安装
命令 pnpm publish
参数 --access public | --tag latest
说明 发布到 npm 公共源
解题思路:
表格成立要一行表头、紧跟着格子数相同的分隔行、再是数据行。分隔行的格子里只写短横线即可,冒号留给列对齐,本题用不上。难点在第二行:参数 --access public | --tag latest 里有一根竖线,必须转义成 \|,否则这一行会被拆成三列,表格就塌了。
详细步骤:
- 写表头行
| 命令 | 参数 | 说明 |,共三列。 - 紧接着写分隔行
| --- | --- | --- |,同样是三格,且必须紧挨着表头,中间不能空行。 - 第一条数据行:命令写成行内代码
pnpm install,参数写成行内代码--frozen-lockfile,说明用**按锁文件严格安装**加粗。 - 第二条数据行:命令写成行内代码
pnpm publish;参数里的竖线转义成\|,即行内代码--access public \| --tag latest;说明用**发布到 npm 公共源**加粗。 - 检验:渲染后是一个三列两行的表格,第二行参数里的竖线原样显示,没有把这一行拆开。
最终答案:
| 命令 | 参数 | 说明 |
| --- | --- | --- |
| `pnpm install` | `--frozen-lockfile` | **按锁文件严格安装** |
| `pnpm publish` | `--access public \| --tag latest` | **发布到 npm 公共源** |读完这一页,你应当能说出表格成立的三个条件,能判断一段源码会不会渲染成表格,能解释列数对不上时多出的格子为什么被丢弃、少掉的为什么补成空格,也能解释单元格里那根竖线为什么必须转义。
