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

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










