Markdown原生支持一些简单的表格功能,但高级功能需要扩展或工具实现(推荐)。我们来回顾一下基础表格功能:
- 创建表格: 使用竖线
|
分隔列,连字符-
定义表头,并通过冒号:
控制对齐方式。例如:
效果:| 姓名 | 年龄 | 城市 | |:------|:----:|-------:| | 张三 | 25 | 北京 | | 李四 | 30 | 上海 |
姓名 年龄 城市 张三 25 北京 李四 30 上海 - 支持的对齐方式:
:----
左对齐:---:
居中对齐----:
右对齐
- 支持的文本格式
在表格内可使用以下Markdown语法:- 加粗:
**文本**
- 斜体:
*文本*
- 代码:反引号包裹(如
`代码`
) - 链接:
[文字](URL)
- 删除线:
~~文本~~
(需GFM支持)
- 加粗:
示例:
| 功能 | 示例 |
|------------|---------------------|
| **加粗** | `**加粗**` → **加粗** |
| *斜体* | `*斜体*` → *斜体* |
| `代码` | `` `print()` `` |
| [链接](#) | 点击跳转 |
效果:
功能 | 示例 |
---|---|
加粗 | **加粗** → 加粗 |
斜体 | *斜体* → 斜体 |
代码 | `print()` |
链接 | 点击跳转 |
标题接下来是表格的高级功能介绍:
1.工具推荐
由于高级表格功能一般需要HTML和CSS渲染,需要一定的代码量和学习成本。推荐直接使用工具在线生成表格或将word和excel中的表格转为markdown格式。
- 在线工具:
- Tables Generator:生成复杂表格(支持合并单元格)[[2]][[6]]
- Excel to Markdown:Excel表格转换为Markdown格式[[9]]
- 编辑器插件:
- VS Code的Markdown Preview Enhanced插件,支持实时预览和导出
2.合并单元格
原生Markdown不支持合并单元格,但可以通过HTML标签<table>
、<tr>
、<td>
和<th>
实现。
-
标签含义
<table>
:定义一个表格,是所有表格元素的容器。<tr>
:table row
的缩写,表示表格中的一行。<td>
:table data
的缩写,表示表格中的一个标准数据单元格(即列),用于普通数据,样式默认左对齐。<th>
:table header
的缩写,表示表头,默认加粗居中。<colgroup>
:用于对表格中的列进行分组,以便对它们应用共同的样式。<col>
:定义了<colgroup>
元素内部的每一列的列属性。<th colspan="2">跨两列合并标题单元格</th>
:合并标题行单元格的两列<td rowspan="2">跨两行合并单元格</td>
:合并数据单元格两行<td colspan="2">跨两列合并单元格</td>
:合并数据单元格两列
-
嵌套顺序:
<table>
→<tr>
→<td>
/<th>
,即先行后列,不可跨层级。
<table>
→<colgroup>
→<col>
→<tr>
/<td>
/<th>
,
<colgroup>
在<table>
里,<col>
在<colgroup>
里,但<col>
和<colgroup>
必须在<tr>
/<td>
/<th>
前。例如:
<table>
<tr> <!-- 第一行 -->
<th>姓名</th> <!-- 表头单元格 -->
<th>年龄</th>
</tr>
<tr> <!-- 第二行 -->
<td>张三</td> <!-- 数据单元格 -->
<td>25</td>
</tr>
</table>
效果:
姓名 | 年龄 |
---|---|
张三 | 25 |
错误示例:
<!-- 错误示例 -->
<table>
<td>无效内容</td> <!-- 缺少<tr>包裹 -->
</table>
- 进阶用法:合并单元格
例如:
<table> <!-- 最外层用<table>标签包裹 -->
<tr><!-- 接下来用<tr>标签包裹第一行 -->
<th>标题1</th><!-- 再然后用<th>或<td>标签包裹,第一行通常是标题行,所以用了<th>,也可用<td> -->
<th colspan="2">标题2</th><!-- 跨两列合并标题 -->
</tr><!-- 用</tr>闭合第一行,注意不能丢闭合符号</tr> -->
<tr><!-- 用<tr>标签包裹内容行 -->
<td>内容1</td><!-- 用<td>标签包裹内容行第一列 -->
<td colspan="2">跨两列合并单元格</td><!-- 用 <td colspan="2">标签合并2,3列 -->
</tr><!-- 用</tr>闭合第二行,注意闭合符号</tr> -->
<tr><!-- 第三行 -->
<td rowspan="2">跨两行合并单元格</td><!-- 第三行第一列用<td rowspan="2">标签合并3,4行-->
<td>内容2</td><!-- 第三行第二列的单元格没有合并行,依然占一行-->
<td>内容3</td>
</tr><!-- 第三行结束 -->
<tr><!-- 第四行 -->
<td>内容4</td><!-- 第四行第一列与第三行第一列两个单元格合并,内容4在第四行第二列 -->
<td>内容5</td>
</tr>
</table>
效果:
标题1 | 标题2 | |
---|---|---|
内容1 | 跨两列合并单元格 | |
跨两行合并单元格 | 内容2 | 内容3 |
内容4 | 内容5 |
3.单元格内强制换行
Markdown表格通常不支持单元格内的强制换行。但可以通过HTML的<br>
标签来实现换行。
<br>
是 HTML 中的换行标签 ,用于在文本中插入一个换行符,使后续内容从新行开始显示。
-
<br>
的特点- 空标签 :
是单标签,无需闭合(如
是 XHTML 的严格写法) - 无内容 :标签内不可包含文本或其他元素
- 空标签 :
-
与其他换行方式的区别
\n
(转义字符) :
是 JavaScript/文本中的换行符,需在 HTML 中结合<pre>
标签或CSS white-space
属性才能生效。<p>
标签:
段落标签默认上下间距较大,而
仅换行无额外间距
-
注意
- 避免滥用 :过度使用
<br>
可能破坏语义化结构,建议优先用 CSS 或语义标签(如<p>
)控制布局 - XHTML 兼容性 :若需兼容 XHTML 标准,需写为自闭合形式
- 避免滥用 :过度使用
-
Markdown表格中换行
Markdown原生不支持换行,但可通过内嵌HTML的
标签实现:
| 标题 |
|--------------|
| 内容1<br>内容2 |
-
效果:
标题 |
---|
内容1 内容2 |
- HTML表格中换行
在 或 标签内直接添加
,强制内容换行:
<table>
<tr>
<td>第一行内容<br>第二行内容</td>
</tr>
</table>
效果 :
第一行内容 第二行内容 |
4.表格嵌套表格
Markdown 本身不支持表格嵌套 ,若需实现该功能,需结合HTML标签。
- Markdown结合HTML(需平台支持)
部分Markdown编辑器(如Typora、VS Code)允许混合HTML:
| 外层表头1 | 外层表头2 |
|-----------|-----------|
| 外层内容 |
<table>
<tr><td>内层内容1</td></tr>
<tr><td>内层内容2</td></tr>
</table>
|
注意,部分平台(如QQ机器人文档、Microsoft Learn)不支持HTML标签,支持的平台渲染效果也因平台而异。比如CSDN就无法用markdown与HTML混用,使表格嵌套表格。
- 使用HTML嵌套(通用)
通过<table>
标签直接嵌套,兼容性较高:
<table> <!-- 外层表格 -->
<tr>
<td>
外层表格单元格
<table> <!-- 内嵌表格 -->
<tr><td>内层内容1</td></tr>
<tr><td>内层内容2</td></tr>
</table>
</td>
</tr>
</table>
效果:
外层表格单元格
|
- 将表格截图或导出为图片
截图或导出为图片,插入Markdown:

5.格嵌套列表
在Markdown中实现表格嵌套列表,需结合HTML标签或特定缩进规则。以下是常见方法:
- 用HTML标签(推荐)
- 通过
<ul>
(无序列表)或<ol>
(有序列表)在表格单元格中嵌套列表:
- 通过
| 标题1 | 标题2 |
|-------------|---------------|
| 表格内容 | <ul><li>列表项1</li><li>列表项2</li></ul> |
效果:
标题1 | 标题2 |
---|---|
表格内容 |
|
-
注意:
- 列表需用HTML标签
<ul>
/<ol>
包裹,确保兼容性 - 部分平台(如GitHub)支持渲染,但CSDN等可能过滤HTML标签
- 列表需用HTML标签
-
Markdown列表缩进(部分平台有效)
在表格单元格中缩进4个空格或1个制表符,触发列表语法:
| 标题1 | 标题2 |
|-------------|---------------|
| 表格内容 |
- 列表项1
- 列表项2
|
- 纯HTML表格嵌套(复杂场景)
直接用HTML实现完整嵌套结构:
<table>
<tr>
<td>表格内容</td>
<td>
<ul>
<li>列表项1
<ol>
<li>列表项1</li>
<li>列表项2</li>
</ol></li> <!-- 注释:子列表需嵌套在<li>内部 -->
<li>列表项2</li>
</ul>
</td>
</tr>
</table>
效果:
表格内容 |
|
6.表格整体样式调整
Markdown本身不直接支持表格样式的调整(如颜色、边框等),但可以通过将表格嵌入HTML中,并使用CSS来控制样式,但部分平台(如CSDN不支持细致的CSS渲染)。以下是通过HTML和CSS实现的例子:
<style>
table { /*table { ... }是CSS规则,用于样式化 HTML 表格,花括号里的内容是声明块,包含的是"属性:值"键值对*/
border-collapse: collapse; /* 合并边框,避免双线问题 */
table-layout: fixed; /* 列宽由首行或表格宽度决定 */
width: 100%; /* 响应式布局:表格宽度占满父容器,使表格自适应不同屏幕宽度*/
height: 500px; /* 固定高度 */
}
th, td {/*th, td { ... }是CSS规则,用于样式化 HTML 表格*/
border: 1px solid #ddd; /* 表头th和单元格td之间添加浅灰色实线边框,宽度1像素 */
padding: 8px; /* 内容与边框间距8像素 */
width: 200px; /* 固定宽度 */
max-width: 300px; /* 最大宽度限制 */
height: 50px; /* 固定单元格高度 */
line-height: 50px; /* 垂直居中内容 */
overflow: hidden; /* 内容溢出时隐藏 */
}
th {
background-color: #f2f2f2; /* 表头背景色浅灰色 */
}
td {
white-space: nowrap; /* 禁止换行 */
overflow: hidden; /* 隐藏溢出内容 */
text-overflow: ellipsis; /* 显示省略号 */
vertical-align: top
text-align: center
}
</style>
<table>
<colgroup><!-- <colgroup> 标签必须在 <table> 内部,且必须在任何 <tr>、<th> 或 <td> 标签之前,用于对表格中的列进行分组,以便对它们应用共同的样式 -->
<col style="width: 30%"> <!-- 第一列占30% -->
<col style="width: 70%"> <!-- 第二列占70% -->
</colgroup>
<tr>
<th>标题1</th>
<th>标题2</th>
</tr>
<tr>
<td>内容1</td>
<td>内容2</td>
</tr>
</table>
以下是跟表格相关的CSS选择器及其常用属性:
- 基础元素选择器
table{}
:元素选择器
作用 :选中所有元素。
常用属性 :width: 100%
:表格宽度占满父容器。是响应式布局。background-color: #f0f0f0
:设置表格背景色。border-collapse: collapse
:合并相邻边框,消除双线。collapse
示合并边框线,separate
表示不合并边框线。table-layout: fixed
:列宽由首行或表格宽度决定(固定列宽,不再受后续行内容影响,避免因内容过长导致表格变形
)除了fixed
,还有一个值auto
(默认值,自动布局。列宽由单元格内容决定,浏览器会先扫描所有单元格,根据最宽的内容确定每列宽度。这种布局方式更灵活,但在渲染大型表格时速度较慢。)
border-spacing: 1000px
:边框线间距1000像素,px是像素单位。border-spacing: xxxpx
只在分离边框线border-collapse: separate
时有效。
th{}
和td{}
:元素选择器
作用:分别选中HTML中的<th>
元素和<td>
元素。border: 1px solid #ddd
:定义边框样式,宽度像素,实线,灰色。solid
是线条类型,还可以有dotted
(点),dashed
(虚线),double
(双线),groove
(3D凹槽框线),ridge
(3D垄状框线),inset
(3D内嵌框线),outset
(3D外凸框线)padding: 8px
:调整内容与边框的间距。background-color: #f2f2f2
:表头背景色。width: 200px
固定宽度。max-width: 300px
:最大宽度限制text-align: center
:文本对齐方式(左/右/居中)。除了center,值还可以有:
left
(默认值,左对齐)
right
(右对齐)
justify
(两端对齐)
inherit
(从父元素继承text-align
属性的值。)overflow: hidden
: 内容溢出时隐藏。除了hidden
,值还可以有:
visible
(默认值,内容益溢出时会显示在元素的边框外,可能会覆盖其他元素或溢出其包含块。)
scroll
(内容益溢出时会被裁剪,但是无论溢出与否浏览器会显示滚动条以便查看剩余的内容。)
auto
(如果内容被裁剪,浏览器会显示滚动条以便查看剩余的内容,是scroll
和hidden
之间的一个混合类型。)white-space: nowrap
:指定元素内的空白符如何处理,包括空格、制表符和换行符等。值可以有:
normal
(默认值,空白符会被浏览器忽略,文本会在必要时自动换行。)
nowrap
(文本不会换行,会在同一行继续,直到遇到
标签为止。)
pre
(保留空白符,其行为方式类似 HTML 中的<pre>
标签。文本不会自动换行,必须手动添加换行符。)
pre-wrap
(保留空白符序列,但是正常地进行换行。当内容超出容器宽度时,会自动换行。)
pre-line
(合并空白符序列,但保留换行符。行首空格会被忽略,其他空格会被合并为一个空格。)
break-spaces
(保留空白符序列,包括空格,且允许在空格处换行,用于要保留空格但希望文本能自动换行的场景。)vertical-align: top
:用于控制行内元素或表格单元格垂直对齐方式的关键属性。其取值可分为四大类:- 基线对齐类(Baseline Alignment)
baseline
(默认值,元素基线与父元素的基线对齐。
特例:若元素无基线(如图片、表单控件),则其底部与父元素基线对齐。)
top
(元素顶部与当前行框的顶部对齐。)
middle
(元素垂直中点与基线+小写字母 x 高度的一半对齐(近似垂直居中)。)
bottom
(元素底部与当前行框的底部对齐。) - 文本对齐类(Text Alignment)
text-top
(元素顶部与父级内容区域(文本选中区域)的顶部对齐。)
text-bottom
(元素底部与父级内容区域的底部对齐) - 上下标类(Subscript/Superscript)
sub
(元素基线与当前行下标基线对齐,如下标文本。)
super
(元素基线与当前行上标基线对齐,如上标文本。) - 数值类(Numeric Values)
固定长度值(如 5px, -3em)
- 正值:元素相对于基线向上偏移。
- 负值:元素相对于基线向下偏移。
百分比值(如 20%)
- 基于当前元素的 line-height 计算偏移量。
- 正百分比上移,负百分比下移。 - 特殊值
inherit
( 继承父元素的 vertical-align 值。
注意:IE6/7 不支持此值。)
initial
(重置为默认值(baseline)。)
- 注意事项:
- 作用对象:仅对行内元素(inline)、行内块元素(inline-block)及表格单元格(table-cell)有效。
- 行内块元素基线规则:若元素内部无文本或 overflow 非 visible,基线为外边距底边;若有文本,基线为最后一行文本的基线。
- 常见问题:
图片与文字间隙:默认 baseline 对齐导致,可设置 vertical-align: middle 或转换为块级元素。
- 基线对齐类(Baseline Alignment)
td, th{}
:组合选择器
作用:将td和th两个选择器组合在一起,用逗号分隔,可以为所有的表头单元格和数据单元格定义相同的样式,减少代码重复。
- 伪类选择器
:hover
:鼠标悬停时改变行/单元格样式。
示例 :
tr:hover {
background-color: #f5f5f5; /* 悬停时行背景色变亮 */
}:nth-child(n)
:按行或列序号设置样式(如斑马纹)。
示例 :
tr:nth-child(even) {
background-color: #f8f8f8; /* 偶数行背景色 */
}
- 属性选择器
作用 :根据HTML属性筛选元素
示例:
/* 选中所有带有class="highlight"的单元格 */
td[class=“highlight”] {
font-weight: bold;
color: red;
}
- 组合选择器
- 后代选择器(
table td
)
作用 :选中表格内的所有<td>
元素
示例:
table td {
vertical-align: top; /* 内容顶部对齐 */
}
- 子代选择器(
table > tr
)
作用 :选中表格的直接子元素(如直接位于<table>
内的<tr>
)
- 后代选择器(
- 优先级规则(引用知识库)
选择器的优先级由高到低:- ID选择器 (如
#table1
)→ 权值100 - 类/属性/伪类选择器 (如
.table
、[type="text"]
)→ 权值10 - 元素选择器 (如
table
、td
)
- ID选择器 (如
/* 表格基础样式 */
table {
width: 100%;
border-collapse: collapse; /* 合并边框 */
}
/* 表头样式 */
th {
background-color: #f2f2f2;
padding: 12px;
text-align: left; /* 左对齐 */
}
/* 数据单元格样式 */
td {
border: 1px solid #ddd;
padding: 8px;
}
/* 斑马纹行 */
tr:nth-child(odd) {
background-color: #f9f9f9; /* 奇数行背景色 */
}
/* 悬停效果 */
tr:hover {
background-color: #e0e0e0; /* 悬停时变色 */
}