HTML5 表格制作教程:从入门到精通
本教程将带你了解如何使用 HTML5 标签创建结构清晰、语义化强的表格,并使用 CSS 进行美化。

(图片来源网络,侵删)
第一部分:基础表格结构
一个最简单的 HTML 表格由以下几个核心标签组成:
<table>: 表格的容器,所有表格内容都放在这个标签内。<tr>: Table Row(表格行),定义表格中的一行。<td>: Table Data(表格数据),定义行中的一个单元格。<th>: Table Header(表头单元格),用于定义表头,通常使用粗体显示。
示例 1:最简单的表格
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">我的第一个表格</title>
</head>
<body>
<h2>学生成绩单</h2>
<table>
<tr>
<th>姓名</th>
<th>科目</th>
<th>分数</th>
</tr>
<tr>
<td>张三</td>
<td>语文</td>
<td>95</td>
</tr>
<tr>
<td>李四</td>
<td>数学</td>
<td>88</td>
</tr>
</table>
</body>
</html>
代码解释:
<table>...</table>包裹了整个表格。- 第一组
<tr>...</tr>是表头行,里面包含了三个<th>...</th>单元格。 - 后面的
<tr>...</tr>是数据行,里面包含了<td>...</td>单元格。
在浏览器中打开这个 HTML 文件,你会看到一个基础的表格,但样式非常朴素。
第二部分:让表格更完整(结构化标签)
为了增强表格的可读性和可访问性,HTML5 提供了一些重要的结构化标签。

(图片来源网络,侵删)
<thead>: Table Head(表头部分),用于包裹表格的表头行,这对于屏幕阅读器等辅助技术非常重要,它可以将这部分内容识别为表头。<tbody>: Table Body(表体部分),用于包裹表格的数据行,一个表格可以有多个<tbody>。<tfoot>: Table Foot(表脚部分),用于包裹表格的底部行,通常用于放置总计、平均值等汇总信息。
示例 2:使用结构化标签
我们将上一个例子进行优化:
<table>
<thead>
<tr>
<th>姓名</th>
<th>科目</th>
<th>分数</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>语文</td>
<td>95</td>
</tr>
<tr>
<td>李四</td>
<td>数学</td>
<td>88</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2">平均分</td> <!-- 我们将在下一节学习 colspan -->
<td>91.5</td>
</tr>
</tfoot>
</table>
为什么这很重要?
- 语义化:清晰地告诉浏览器和开发者,表格的哪一部分是头部,哪一部分是主体。
- 样式控制:你可以单独为
<thead>,<tbody>,<tfoot>设置不同的样式(给表头添加背景色,给表脚添加加粗字体)。 - 可访问性:屏幕阅读器可以正确地朗读表头,并在滚动到表体时重复表头信息,极大地改善了视障用户的体验。
第三部分:合并单元格
有时我们需要跨行或跨列显示内容,这时就需要用到单元格合并。
-
跨列合并
- 属性:
colspan - 用法:
<td colspan="2">表示这个单元格横跨 2 列。 - 注意:合并后,需要从下一行中相应地删除被合并的单元格数量。
- 属性:
-
跨行合并
- 属性:
rowspan - 用法:
<td rowspan="2">表示这个单元格纵向跨越 2 行。 - 注意:合并后,需要从同一行的后续列中相应地删除被合并的单元格数量。
- 属性:
示例 3:合并单元格
假设我们要制作一个课程表:
<table border="1"> <!-- 加个边框方便观察 -->
<tr>
<th>时间</th>
<th>周一</th>
<th>周二</th>
</tr>
<tr>
<th>上午</th>
<td>语文</td>
<td>数学</td>
</tr>
<tr>
<th>下午</th>
<!-- "自习" 跨了周二和周三,但我们没有周三列,所以这里只演示跨列 -->
<td colspan="2">自习</td>
<!-- 注意:因为 "自习" 跨了2列,所以这一行后面不能再有 <td> 了 -->
</tr>
</table>
再来看一个 rowspan 的例子:
<table border="1">
<tr>
<th rowspan="2">学生信息</th> <!-- 这个单元格横跨2行 -->
<th>姓名</th>
<th>年龄</th>
</tr>
<tr>
<!-- "学生信息" 已经占了这一行的第一个位置,所以这里不再需要 <th> -->
<td>王五</td>
<td>20</td>
</tr>
</table>
第四部分:使用 CSS 美化表格
原生 HTML 表格非常简陋,我们需要用 CSS 来让它变得美观、专业。
基础样式
我们可以为表格、行、单元格添加边框、背景色、内边距等。
/* 为表格添加边框,并设置边框合并 */
table {
width: 100%; /* 表格宽度 */
border-collapse: collapse; /* 合并边框,避免双线 */
font-family: Arial, sans-serif;
}
/* 为所有单元格(th, td)添加边框和内边距 */
th, td {
border: 1px solid #dddddd; /* 灰色边框 */
padding: 8px; /* 内边距 */
text-align: left; /* 文字左对齐 */
}
/* 为表头单元格添加背景色和文字颜色 */
th {
background-color: #f2f2f2;
color: #333;
}
/* 为表格主体中的偶数行添加背景色(斑马线效果) */
tbody tr:nth-child(even) {
background-color: #f9f9f9;
}
/* 鼠标悬停在行上时的高亮效果 */
tbody tr:hover {
background-color: #e2e2e2;
cursor: pointer;
}
如何应用 CSS?
你可以将上面的 CSS 代码放在 <head> 标签内的 <style> 标签中:
<head>
<meta charset="UTF-8">美化后的表格</title>
<style>
/* 把上面的 CSS 代码粘贴到这里 */
</style>
</head>
第五部分:最佳实践与进阶技巧
响应式表格
当屏幕宽度小于表格宽度时,表格会出现水平滚动条,我们可以使用 CSS 的 @media 查询来创建响应式表格。
/* 默认情况下,表格正常显示 */
.responsive-table {
width: 100%;
border-collapse: collapse;
}
/* 当屏幕宽度小于 768px 时(例如手机) */
@media screen and (max-width: 768px) {
.responsive-table {
/* 将表格变为块级元素 */
display: block;
overflow-x: auto; /* 允许水平滚动 */
white-space: nowrap; /* 防止文字换行 */
}
}
<caption>
使用 <caption> 可以为表格添加一个标题或说明,这对可访问性很有帮助。
<table>
<caption>2025年第四季度销售报表</caption>
<thead>
<!-- ... -->
</thead>
<tbody>
<!-- ... -->
</tbody>
</table>
<scope> 属性
在复杂的表格中,为 <th> 添加 scope 属性可以更精确地定义其作用范围,进一步优化可访问性。
scope="col":表示该表头作用于其所在的列。
scope="row":表示该表头作用于其所在的行。
<thead>
<tr>
<th scope="col">姓名</th>
<th scope="col">语文</th>
<th scope="col">数学</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">张三</th>
<td>95</td>
<td>88</td>
</tr>
</tbody>
创建一个完整的 HTML5 表格
让我们把所有知识点整合起来,创建一个最终版的、结构完整、样式美观的表格。
HTML 代码 (index.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">完整示例:员工信息表</title>
<style>
/* 全局样式 */
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 20px;
background-color: #f4f4f4;
color: #333;
}
/* 表格容器 */
.table-container {
width: 80%;
margin: 0 auto;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
border-radius: 8px;
overflow: hidden; /* 让圆角效果应用到表格 */
}
/* 表格基础样式 */
table {
width: 100%;
border-collapse: collapse; /* 合并边框 */
}
/* 表格标题 */
caption {
caption-side: top; /* 将标题放在表格上方 */
padding: 15px;
font-size: 1.5em;
font-weight: bold;
background-color: #4CAF50;
color: white;
}
/* 单元格样式 */
th, td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #ddd;
}
/* 表头样式 */
thead th {
background-color: #4CAF50;
color: white;
text-transform: uppercase;
font-size: 0.9em;
letter-spacing: 0.5px;
}
/* 表体样式 */
tbody tr {
transition: background-color 0.3s ease;
}
/* 斑马线样式 */
tbody tr:nth-of-type(even) {
background-color: #f8f8f8;
}
/* 鼠标悬停效果 */
tbody tr:hover {
background-color: #e8f5e9;
cursor: pointer;
}
/* 响应式设计 */
@media screen and (max-width: 768px) {
.table-container {
width: 95%;
}
table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
caption {
caption-side: bottom; /* 在小屏幕上,标题放下面更合适 */
}
}
</style>
</head>
<body>
<div class="table-container">
<table>
<caption>员工信息表</caption>
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">姓名</th>
<th scope="col">部门</th>
<th scope="col">职位</th>
<th scope="col">入职日期</th>
</tr>
</thead>
<tbody>
<tr>
<td>1001</td>
<td>赵六</td>
<td>技术部</td>
<td>前端工程师</td>
<td>2025-03-15</td>
</tr>
<tr>
<td>1002</td>
<td>钱七</td>
<td>市场部</td>
<td>市场专员</td>
<td>2025-07-22</td>
</tr>
<tr>
<td>1003</td>
<td>孙八</td>
<td>技术部</td>
<td>后端工程师</td>
<td>2025-11-01</td>
</tr>
<tr>
<td>1004</td>
<td>周九</td>
<td>人事部</td>
<td>HR经理</td>
<td>2025-05-30</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
这个最终示例包含了:
- 语义化结构:
<table>, <caption>, <thead>, <tbody>, <th>, <td>, scope 属性。
- CSS 美化:边框、内边距、背景色、悬停效果、斑马线。
- 响应式设计:使用
@media 查询确保在移动设备上也能良好显示。
- 良好的用户体验:清晰的视觉层次和交互反馈。
希望这份详细的教程能帮助你完全掌握 HTML5 表格的制作!
使用 <caption> 可以为表格添加一个标题或说明,这对可访问性很有帮助。
<table>
<caption>2025年第四季度销售报表</caption>
<thead>
<!-- ... -->
</thead>
<tbody>
<!-- ... -->
</tbody>
</table>
<scope> 属性
在复杂的表格中,为 <th> 添加 scope 属性可以更精确地定义其作用范围,进一步优化可访问性。
scope="col":表示该表头作用于其所在的列。scope="row":表示该表头作用于其所在的行。
<thead>
<tr>
<th scope="col">姓名</th>
<th scope="col">语文</th>
<th scope="col">数学</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">张三</th>
<td>95</td>
<td>88</td>
</tr>
</tbody>
创建一个完整的 HTML5 表格
让我们把所有知识点整合起来,创建一个最终版的、结构完整、样式美观的表格。
HTML 代码 (index.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">完整示例:员工信息表</title>
<style>
/* 全局样式 */
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
margin: 20px;
background-color: #f4f4f4;
color: #333;
}
/* 表格容器 */
.table-container {
width: 80%;
margin: 0 auto;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
border-radius: 8px;
overflow: hidden; /* 让圆角效果应用到表格 */
}
/* 表格基础样式 */
table {
width: 100%;
border-collapse: collapse; /* 合并边框 */
}
/* 表格标题 */
caption {
caption-side: top; /* 将标题放在表格上方 */
padding: 15px;
font-size: 1.5em;
font-weight: bold;
background-color: #4CAF50;
color: white;
}
/* 单元格样式 */
th, td {
padding: 12px 15px;
text-align: left;
border-bottom: 1px solid #ddd;
}
/* 表头样式 */
thead th {
background-color: #4CAF50;
color: white;
text-transform: uppercase;
font-size: 0.9em;
letter-spacing: 0.5px;
}
/* 表体样式 */
tbody tr {
transition: background-color 0.3s ease;
}
/* 斑马线样式 */
tbody tr:nth-of-type(even) {
background-color: #f8f8f8;
}
/* 鼠标悬停效果 */
tbody tr:hover {
background-color: #e8f5e9;
cursor: pointer;
}
/* 响应式设计 */
@media screen and (max-width: 768px) {
.table-container {
width: 95%;
}
table {
display: block;
overflow-x: auto;
white-space: nowrap;
}
caption {
caption-side: bottom; /* 在小屏幕上,标题放下面更合适 */
}
}
</style>
</head>
<body>
<div class="table-container">
<table>
<caption>员工信息表</caption>
<thead>
<tr>
<th scope="col">ID</th>
<th scope="col">姓名</th>
<th scope="col">部门</th>
<th scope="col">职位</th>
<th scope="col">入职日期</th>
</tr>
</thead>
<tbody>
<tr>
<td>1001</td>
<td>赵六</td>
<td>技术部</td>
<td>前端工程师</td>
<td>2025-03-15</td>
</tr>
<tr>
<td>1002</td>
<td>钱七</td>
<td>市场部</td>
<td>市场专员</td>
<td>2025-07-22</td>
</tr>
<tr>
<td>1003</td>
<td>孙八</td>
<td>技术部</td>
<td>后端工程师</td>
<td>2025-11-01</td>
</tr>
<tr>
<td>1004</td>
<td>周九</td>
<td>人事部</td>
<td>HR经理</td>
<td>2025-05-30</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
这个最终示例包含了:
- 语义化结构:
<table>,<caption>,<thead>,<tbody>,<th>,<td>,scope属性。 - CSS 美化:边框、内边距、背景色、悬停效果、斑马线。
- 响应式设计:使用
@media查询确保在移动设备上也能良好显示。 - 良好的用户体验:清晰的视觉层次和交互反馈。
希望这份详细的教程能帮助你完全掌握 HTML5 表格的制作!
