Menu

HTML colspan 和 rowspan:如何合并表格单元格

用 colspan 横向合并多列单元格,用 rowspan 纵向合并多行单元格。学会数清单元格让表格保持整齐,制作分组表头,并让带合并单元格的表格对屏幕阅读器同样友好。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

colspan:一个单元格横跨多列

colspan="n" 让单元格的宽度等于 n 列。它所在的行因此少写 n - 1 个单元格。下面的合计横跨前两列:

最后一行只有两个单元格,但第一个算作两个,所以这一行和其他行一样,加起来还是三列。

rowspan:一个单元格向下跨越多行

rowspan="n" 让单元格的高度等于 n 行。它下面的行要省略这一列,因为这个高单元格已经填满了它:

Bob 和 Cy 这两行只有一个 <td>:Team 列已经被 “Design” 占了。HTML 里不会标出这一点,所以读带 rowspan 的表格时要从上往下读,并记住哪些列仍被覆盖。

colspan 和 rowspan 一起用:课程表

一个单元格可以同时向两个方向合并。课程表就是典型例子:有的课持续两个时段,有的课跨越两天:

数一数 10:00 这一行:先是时间表头,然后 Mon 被上一行的 HTML 覆盖,接着 Lab 填满 Tue 和 Wed。到了 11:00,Mon 又空出来了,而 Lab 仍覆盖 Tue 和 Wed,所以这一行只有一个数据单元格。

数清单元格,让表格保持整齐

算上每个单元格的 colspan,以及上方 rowspan 单元格覆盖的列,每一行加起来的列数都必须相同。如果某一行多了一个单元格,浏览器会为它新增一列,表格边缘就会参差不齐:

在错误的表格里,第二行忘了 A 已经覆盖了它的第一列,于是 D 落到了其他行都没有的第三列。修复方法是删掉一个单元格。用 colspan 时也会犯同样的错:带宽单元格的那一行保留了原来全部的单元格。

少一个单元格则是相反的问题:这一行提前结束,末尾留下一个空洞。

用 colspan 制作分组表头

表头可以横跨它所标注的那几列,放在一行更具体的表头上方。给它加上 scope="colgroup",屏幕阅读器就会把它应用到下面的所有列:

“City” 用 rowspan="2" 跨越两行表头,每个月份用 colspan="2" 跨越自己的两列。<colgroup> 元素定义了 scope="colgroup" 所指的列组。这样,屏幕阅读器读到 Rome 的 31 单元格时,就能读出 “Rome, July, High, 31”。表格结构的其他部分,参见 HTML 表格。

只在结构真正需要时合并

合并单元格会让表格更难用屏幕阅读器阅读,也更难排序、筛选或复制到电子表格里。只在数据确实分组时使用它们(合计、子列上方的表头、持续两小时的课)。如果一个表格需要很多合并,拆成两个更简单的表格通常更清楚。

常见错误

  • 保留了被覆盖的单元格。 一个 colspan="2" 的单元格代替两个单元格;删掉原来的一个。
  • 忘了 rowspan 下方的行。 其中每一行都要少一个单元格。
  • 把 colspan 写在 <tr> 上。 它只对 <td> 和 <th> 有效。
  • 为了视觉布局而合并,比如在页面布局表格中放一行横幅。布局请用 CSS grid。
  • 用 colspan="100%" 表示“占满整个宽度”。浏览器只读取开头的数字,所以这个单元格会跨越 100 列,并给表格添加空列。这个值是整数列数。

常见问题

HTML 中的 colspan 有什么作用?

colspan 让 <td> 或 <th> 横跨多列:<td colspan="3"> 在所在行中占据三个单元格的位置。这一行因此要比其他行少写两个单元格。

HTML 中的 rowspan 有什么作用?

rowspan 让单元格向下跨越多行:<td rowspan="2"> 同时占据自己所在的行和下面一行。下一行必须省略这一列,因为上方的单元格已经把它占了。

一个单元格能同时使用 colspan 和 rowspan 吗?

可以。<td colspan="2" rowspan="2"> 覆盖两列两行的区域。它经过的每一行都要少写两个自己的单元格。

为什么我的表格多出一个凸出来的单元格?

把合并算进去之后,有一行的单元格比其他行多。通常是 rowspan 下方的行仍为被覆盖的列写了单元格,或者带 colspan 的行保留了原来全部的单元格。删掉多余的 <td> 即可。

colspan 的最大值是多少?

浏览器把 colspan 限制在 1000,把 rowspan 限制在 65534。对于 colspan,值为 0 或不以数字开头时,会被当作 1。

Coddy 编程语言插图

和 Coddy 一起学编程

开始