rowspan是唯一合法的多行合并方式,必须从首行起始且跨行位置不留空标签,不可跨thead/tbody边界,与colspan混用时需确保行列总数守恒。

rowspan 是唯一合法、直接、浏览器原生支持的多行合并方式;其他任何用 CSS 隐藏边框、JS 动态插入或 visibility: hidden 占位的做法,都不算真正合并——语义丢失、屏幕阅读器无法识别、打印/导出时照样分列。
rowspan 必须从第一行写起,且后续行对应列必须完全留空
合并三行,不是在第二、第三行“补一个空 <td></td>”,而是从第二行开始,那个列位置连标签都不能出现。
- ✅ 正确:
<tr><td rowspan="3">类别</td><td>A项</td></tr><tr><td>B项</td></tr><tr><td>C项</td></tr> - ❌ 错误:
<tr><td rowspan="3">类别</td><td>A项</td></tr><tr><td></td><td>B项</td></tr>(多了一个<td>,整行列数+1,右侧全偏移) - ⚠️ 值不能超限:
rowspan="5"写在只有 3 行数据的列里,最后一行会被截断,浏览器不报错但内容消失
遇到 thead/tbody 分组时,rowspan 不能跨组自动延续
rowspan 只作用于它所在 <tr> 开始的连续行,不会穿透 <thead> 和 <tbody> 边界。如果表头要跨 tbody 的前两行,得把 rowspan 放在 <tbody> 第一行里,而不是 <thead> 中。
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 常见翻车点:在
<thead><tr><th rowspan="3">ID</th></tr></thead>后,<tbody>里第一行又写了<td>—— 这个<th>实际只覆盖了<thead>自身那 1 行,rowspan在组外失效 - 验证方法:
document.querySelectorAll('tr')每行的children.length必须全部相等;不等就说明结构已错位
和 colspan 混用时,行列总数必须守恒
一个单元格设 rowspan="2" colspan="3",等于吃掉 2×3=6 个原始格子。周围所有行、列都得按这个“吞掉量”做减法。
立即学习“前端免费学习笔记(深入)”;
- 该单元格所在行:其余单元格的
colspan总和 + 3 = 表格总列数(比如总列数是 5,则其余单元格colspan加起来只能是 2) - 下一行中:被覆盖的 3 列位置必须全空,既不能写
<td>,也不能写<td colspan="0">(无效) - 最容易忽略的是:合并区域右下角那块“隐性空白区”——它不是透明,而是根本不存在;想靠 CSS 给它加背景或边框,会失败
真正难的不是写对一行 rowspan,而是从第一行就开始画好网格草图:标出哪些列是固定标签、哪些行属于同一组、哪几个格子会被吃掉。写错一个 <td>,整张表就错位,而浏览器从不提醒你。


















