结论:用colspan处理横向合并表头、rowspan处理纵向合并标签,但最易错的是删漏应删的<td>——如colspan="2"后未减少1个<td>会导致空单元格错位,rowspan="2"后对应行必须留空<td>而非删除,且空课单元格必须保留<td></td>以维持结构。

直接说结论:用 colspan 处理「星期几」这类横向合并的表头,用 rowspan 处理「上午/下午」这类纵向合并的时间段标签——但最容易出错的不是属性写错,而是删漏了该删的 <td>。
为什么课表第一行总多出一个空单元格?
这是 colspan 使用后最典型的结构错乱现象。比如你给「课程安排」表头加了 colspan="2",但没删掉它右边原本该占位的那个 <td>,浏览器会自动补一个空单元格来凑齐列数,导致整行偏移。
- 正确做法:只要写了
colspan="N",这一行就要比其他行少写N−1个<td> - 错误示例:
<td colspan="2">周一</td><td>周二</td><td>周三</td>—— 这实际占了 4 列(2+1+1),但后面行只写了 3 个<td>,必然错位 - 调试技巧:在浏览器开发者工具里右键检查表格,看
<tr>下的子元素数量是否一致
如何让「下午」跨两行却不重复渲染?
rowspan 的本质是“占用下方同列位置”,所以你在第 2 行写了 <td rowspan="2">下午</td>,第 3 行同一列就不能再出现 <td>,否则会被撑开或覆盖。
- 常见错误:在第 3 行对应位置仍保留
<td>,结果「下午」只显示一次,但下面那行数据被挤到右侧,表格完全变形 - 必须同步删掉:第 3 行、第 4 行……直到
rowspan覆盖结束的那一行,对应列都不要写<td> - 注意边界:如果
rowspan="3",它会影响当前行 + 后续 2 行,共 3 行;第 4 行起恢复自由
课表中「无课」单元格要不要写 <td></td>?
要,而且必须写。空单元格不是可选的占位符,而是维持表格结构的必要节点。
立即学习“前端免费学习笔记(深入)”;
- 不写会导致该行列数不足,浏览器强行补齐,后续所有行都会错位
- 即使内容为空,也要保留
<td></td>或<td> </td>(后者防折叠) - 如果某节课跨多行(如实验课连上两节),用
rowspan="2",但下一行对应列仍要留空——不是删掉,是留空
响应式课表在小屏上为何全乱了?
纯 HTML 表格没有内置响应逻辑,colspan 和 rowspan 在窄屏下只会把单元格拉得更宽或更高,不会自动重排。
- 别指望
table { width: 100% }能解决问题,它只缩放整体宽度,不改变行列拓扑 - 真要适配手机:要么用 CSS
@media隐藏部分列,要么放弃<table>改用display: grid重构(但那就不是「HTML 表格制作课表」了) - 折中方案:加
overflow-x: auto给父容器,让用户左右滑动查看完整课表
真正难的不是记住 colspan 和 rowspan 的语法,而是每次修改前先数清楚:这一行总共该有多少列,哪些位置已被合并,哪些 <td> 必须消失——漏掉一个,整张课表就废了。



















