rowspan="n"从当前行起向下占用n行(含当前行),被覆盖的行中对应列必须省略单元格,否则导致表格错位、空白或边框断裂;其值须为正整数且不超过剩余行数,不跨thead/tbody生效。

rowspan 不是让单元格“变高”,而是让它“吃掉”下方指定数量的同列单元格位置。写错一行,整张表就错位——浏览器不报错,只渲染出空白、重叠或边框断裂。
rowspan="N" 到底覆盖哪几行?
从当前 <td> 所在行开始,向下连续占用 N 行(含当前行)。比如 <code>rowspan="3" 占据第 1、2、3 行的同一列位置,那么第 2 行和第 3 行里,该列不能再出现任何 <td> 或 <code><th>,否则会强行插入新格子,撑开结构。
<p>常见错误现象:</p>
<ul>
<li>某列突然多出一整行空白,或文字挤到右上角</li>
<li>控制台没报错,但表格右侧整体偏移、边框断开</li>
<li>用开发者工具检查 DOM,发现某列在第 2 行莫名多了一个 <code><td>
<h3>rowspan 必须配合“跳格”才能生效</h3>
<p>被 <code>rowspan 覆盖的后续行中,对应列位置必须彻底省略单元格。这不是可选优化,是强制规则。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
例如:第一行 <td rowspan="2">A</td>
<td>B</td>,那么第二行只能写 <td>C</td>(即跳过第一列),不能写 <td>X</td>
<td>C</td>。
使用场景:
- 课程表中教师姓名跨多节课显示
- 影院排片表中影厅名 + 海报垂直占满所有影评行
- 数据报表中分类标题纵向对齐下属多条明细
rowspan 和 colspan 同时用,怎么算列总数?
每一行所有单元格的 colspan 值之和,必须等于表格逻辑总列数(也就是表头定义的列数)。rowspan 不影响该计算,但它会让被跨越的那些行“少画”某些列——所以你要手动确保:被 rowspan 跳过的列,在后续行里不能靠补 <td> 来凑数。
<p>参数差异:</p>
<ul>
<li>
<code>rowspan="2" 合法,rowspan="2px" 或 rowspan="0" 会被浏览器忽略
rowspan="3" 就无效)rowspan 不跨 <thead>/<code><tbody> 分组生效,别指望它从表头一直拉到表体
<h3>为什么调试时总看到“Table row has fewer cells than required”?</h3>
<p>这是 Chrome/Firefox 在 DevTools 控制台给出的隐式警告,不是 JS 错误,但说明你某一行的 <code>colspan 总和 ≠ 预期列数。根源往往在 rowspan 使用后,忘了删掉后续行对应位置的 <td>。
<p>排查建议:</p>
<ul>
<li>先手绘草图,标出每个 <code>rowspan 覆盖范围colspan 值之和,尤其注意被 rowspan 跨越的那些行<tr> 内部结构,比代码更真实
<p>最易被忽略的一点:即使你只在 <code><th> 上用了 <code>rowspan,它下方 <tbody> 里的对应列也必须跳格——语义分组不影响布局计算。</tbody>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










