课程表应使用语义化html表格:用构建结构,标注行列表头并设置scope属性,用rowspan/colspan合并单元格,样式通过css类控制,确保可访问性、打印及响应式兼容。

课程表需要固定行列结构,<table> 是最直接的选择
<p>HTML 的 <code><table> 标签天然适合表达二维课程安排:行代表时间(如节次),列代表星期(周一至周五)。不用 JavaScript 或 CSS Grid 强行模拟,能避免响应错位、打印失真、屏幕阅读器识别异常等问题。关键不是“能不能用”,而是“怎么组织语义才不翻车”。
<h3><code><th> 必须用于表头,且要区分作用域(<code>scope 属性)
课程表顶部星期和左侧节次都属于表头,但混用 <td> 会导致辅助技术无法理解行列关系。必须用 <code><th>,并明确标注作用域:
<ul>
<li>
<code><th scope="col">周一</th> —— 告诉浏览器该单元格是“列头”
<th scope="row">第1节</th> —— 告诉浏览器该单元格是“行头”<th scope="colgroup"> 或留空,避免 <code>scope="row col"(部分读屏支持差)
跨单元格要用 rowspan 和 colspan,别靠空格或 <br> 拆分
一门课占两节连堂?一个教室同时上两门课?这些必须靠属性合并单元格,否则视觉错乱、打印断行、移动端塌陷都会出现:
-
<td rowspan="2">数学</td>—— 向下合并两行(第1–2节都是数学) -
<td colspan="3">综合实践</td>—— 向右合并三列(周三至周五下午) - 禁止写
<td>语文<br>(201教室)</td>—— 换行不改变单元格逻辑,语义丢失,CSS 控制困难
样式控制优先用 CSS 类,禁用 border、width 等过时属性
老教程里满屏 border="1"、width="800" 会导致响应式失效、缩放变形、与现代框架冲突。所有样式应抽离到 class 中:
| 周一 | 周二 |
|---|---|
| 第1节 | 数学 |
然后用 CSS 控制:.timetable { width: 100%; border-collapse: collapse; }、.timetable th, .timetable td { border: 1px solid #999; padding: 8px; }。这样适配打印、暗色模式、缩放才可控。
最容易被忽略的是语义完整性:没加 scope 的 <th> 在读屏软件里会读成“周一,单元格”,而非“周一,列标题”;<code>rowspan 跨越多行却漏掉中间 <tr>,会让表格结构断裂——浏览器可能勉强渲染,但导出 PDF 或被自动化工具解析时直接丢数据。</tr>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











