rowspan和colspan是直接改写表格网格坐标的布局指令,填错数值会导致漏格、重叠或空白;colspan="n"需省略右侧n−1个td/th,rowspan="n"要求下方n−1行同列位置彻底留空,二者共用时对应二维区域必须完全清空。

rowspan 和 colspan 不是“加个属性就自动合并”,而是直接改写表格网格坐标的布局指令——填错一个数,整行或整列就错位,浏览器不报错,但渲染结果漏格、重叠、空白全都有。
colspan="n" 是删掉右边 n−1 个 <td>,不是加宽
<p>很多人写 <code>colspan="3" 后,还在同一行继续写三个 <td>,结果该行变成 4 列(3+1),下一行按 3 列写就偏移。本质是:这个单元格占了 3 列位置,右边本该存在的两个 <code><td> 必须省略。
<ul><li>若某行应为 5 列,第一个 <code><td colspan="3"> 出现后,后续最多只能再写 2 个 <code><td>(不是 4 个)
<li>验证方法:用 <code>Array.from(tr.children).reduce((s, el) => s + (el.colSpan || 1), 0) 计算每行真实列数,所有 <tr> 结果必须一致
<li>典型翻车:<code><tr>
<td colspan="3">A</td>
<td>B</td>
<td>C</td>
<td>D</td>
</tr> → 这行实际有 5 列,但第 4 个 <td> 挤到第 5 列,下一行对不齐
<h3>rowspan="n" 要求下方 n−1 行同列位置彻底留空</h3>
<p><code>rowspan="2" 表示“本格向下吞掉正下方那一格”,所以下一行、同一列不能再出现任何 <td> 或 <code><th>。写了却没删,表格立刻裂开。
<ul><li><code><thead> 和 <code><tbody> 是独立容器,但列坐标必须对齐:如果 <code><thead> 里用了 <code>rowspan,<tbody> 第一行对应列也必须跳过
<li>反例:<code><tr>
<td rowspan="2">Name</td>
<td>Alice</td>
</tr>
<tr>
<td>Name</td>
<td>Bob</td>
</tr> ❌ 错位;正确写法是第二行去掉第一个 <td>
<li>调试技巧:开发者工具中选中单元格,看 box model 是否跨行渲染;再检查 DOM 中下一行同列是否真的没节点</li>
<h3>rowspan 和 colspan 同时用时,二维空间必须清空</h3>
<p>一个 <code><td rowspan="2" colspan="3"> 占据 2 行 × 3 列 = 6 个逻辑位置。这 6 个位置在后续行/列中全部不可再用——尤其右下角那格最容易被重复填充。
<ul>
<li>先画草图标出每个单元格起始行列和跨度,别靠脑子硬算</li>
<li>每一行的列总数要一致,每一列的行总数也要一致(跨 <code><thead>/<code><tbody> 时尤其关键)
<li>如果合并区域右下角卡在 <code><tbody> 开头,注意 <code><tbody> 首行被 <code>rowspan 占用的列不能补 <td>
复杂表格里最常被忽略的不是语法,而是“被占据的位置是否真的一处都没写”。DOM 里多一个 <code><td>,视觉上可能只偏移一格,但语义和可访问性已经坏了。</td>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











