上一章的列表适合逐项阅读。如果每项都包含同样几类信息,例如活动的时间、主题和房间,把这些信息排成行和列更容易比较。这种具有行列对应关系的数据适合使用 HTML 表格。
先理解行,再理解单元格
table 包住整个表格;tr(table row)表示一行;th 表示表头单元格;td 表示普通数据单元格。先写一行列名,再写每一行数据:
<table>
<caption>周六活动安排</caption>
<thead>
<tr><th scope="col">时间</th><th scope="col">主题</th></tr>
</thead>
<tbody>
<tr><td>10:00</td><td>自由阅读</td></tr>
<tr><td>14:00</td><td>读后交流</td></tr>
</tbody>
</table>每个 tr 里面依次放各列单元格。第一列一直是时间,第二列一直是主题;不要在第二行突然反过来。thead 把表头行分成一组,tbody 把数据行分成一组,能让源码结构更清楚。caption 是整个表格的标题,在 table 开头写一次即可。
为什么不全部使用 td
th 告诉浏览器这是表头,不只是碰巧加粗的文字。scope="col" 说明它解释所在列;如果某个数据行开头用活动名称作行标题,可以用 th scope="row"。这些关联帮助辅助技术理解某个数据属于哪个标题。用 strong 包住 td 中的文字,只能标记文字重要,不能代替表头含义。
合并单元格不是删掉内容那么简单
colspan="2" 表示一个单元格占两列,rowspan="2" 表示占两行。合并后要重新检查每行占用的格子数,避免后续数据错位。入门表格尽量先保持简单,只有确有跨列、跨行信息时再合并。
Lab 第二个示例在表格底部增加 tfoot,它是汇总行的分组,并用 colspan 写出覆盖两列的说明。注意表格默认不一定有明显边框;没有网格线不代表 table 失效。后续 CSS 会介绍边框和间距,此处观察的是数据关系和浏览器默认呈现。不要用表格把整张网页排成左右栏,页面布局会在 CSS 阶段学习。
页面实验:表格
先切换对照示例,再按照观察提示修改一处 HTML,比较源码与真实页面。示例中的英文短句可以替换成自己的文字。
沿列向下看,时间与主题始终对应。默认表格没有额外绘制边框。
预览保留浏览器默认的标题、段落和表单外观。示例切换会替换编辑内容;重置实验可恢复初始状态。可点击页内链接、输入文字和选择选项;此练习预览不提交数据、不运行脚本。要在本机尝试,将完整代码保存为 index.html 后用浏览器打开。
知识测验
动手编写:表格
新建 index.html,按照下面的要求编写完整页面;保存并用浏览器打开,边操作边检查结果。参考答案是一种实现,文字内容可以不同。
- 制作三列表格,列为时间、活动、地点,包含 caption、表头及两行数据。
- 为列标题设置 scope,检查每行都按相同顺序包含三格。