HTML 表格

相信你对表格不陌生吧,日常生活中经常需要和表格打交道,如学生的课程表、上班族的工时表、采购员的采购记录表等等。下图是一个用户表,该表包含了用户编码、姓名、年龄和性别信息,笔者将通过标注来指出表格中的组成部分:

image.png

如果我们将上面表格映射到 HTML 中表格,它们的对应关系如下:

  • 整个表格 -> 对应 <table> 元素

  • 表格头 -> 对应 <thead>元素,全称 table head

  • 表格主体 -> 对应 <tbody> 元素,全称 table body

  • 表格页脚 -> 对应 <tfoot>元素,全称 table foot

  • 表格的一行 -> 对应 <tr> 元素,全称 table row

  • 表格头的单元格 -> 对应 <th> 元素,全称 table header

  • 表格非表头的单元格 -> 对应 <td> 元素,全称,table data

将上述对应关系整理后如下图:

image.png

简单示例:定义一个表格,该表格包含表头、表主体和表页脚,表格主体总共有两行数据,如下:

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML教程</title>
</head>
<body>
    
    <table>
        <!-- 表格头部 -->
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>城市</th>
            </tr>
        </thead>
        <!-- 表格主体 -->
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td>北京</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>28</td>
                <td>上海</td>
            </tr>
        </tbody>
        <!-- 表格页脚(注意位置,仍会渲染在底部) -->
        <tfoot>
            <tr>
                <td colspan="3">汇总:共2条人员数据</td>
            </tr>
        </tfoot>
    </table>

</body>
</html>

看看效果👉自己动手试一试 »

运行示例,效果如下图:

image.png

表格相关元素

< table > 元素

该元素用于包裹整个表格的所有内容,是表格的根容器,定义一个完整的二维表格。

注意,该子元素直接子元素只能是 <caption>(表格标题)、<thead>、<tbody>、<tfoot>、<tr>(无结构划分时可直接放)。不能直接嵌套 <td>、<th>,<td>、<th> 必须通过 <tr> 包裹。

table 元素的常用属性如下表:

属性名取值作用
border非负整数(如1)给表格添加边框,边框宽度为对应像素
width像素(如500)、百分比(如100%)设置表格宽度
cellspacing非负整数(如0、5)设置单元格之间的间距(边框与边框之间的距离)
cellpadding非负整数(如8)设置单元格内容与单元格边框之间的内边距
alignleft/center/right表格在页面中的水平对齐方式

简单示例:

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML教程</title>
</head>
<body>
    
    <table border="1" width="500" cellspacing="0" cellpadding="8" align="center">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>城市</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td>北京</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>28</td>
                <td>上海</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="3">汇总:共2条人员数据</td>
            </tr>
        </tfoot>
    </table>

</body>
</html>

看看效果👉自己动手试一试 »

运行示例,效果如下:

image.png

表格标题 < caption >

该元素定义表格的整体标题,用于说明表格的用途(如 “2025 年上半年员工成绩单”)。

表格头部 <thead>(Table Head)

该元素定义表格的头部,存放列标题等说明性内容。

表格主体 <tbody>(Table Body)

该元素定义表格的主体,存放表格的核心业务数据。

注意,一个 <table> 可以有多个 <tbody>(用于分段展示数据,如按月份拆分报表,每个月份一个<tbody>),方便分组控制。

示例:

<table border="1" width="500" cellspacing="0" cellpadding="8" align="center">
    <thead>
        <tr>
            <th>姓名</th>
            <th>年龄</th>
            <th>城市</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>张三</td>
            <td>25</td>
            <td>北京</td>
        </tr>
        <tr>
            <td>李四</td>
            <td>28</td>
            <td>上海</td>
        </tr>
    </tbody>
    <tbody>
        <tr>
            <td>王五</td>
            <td>45</td>
            <td>深圳</td>
        </tr>
        <tr>
            <td>赵六</td>
            <td>38</td>
            <td>云南</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <td colspan="3">汇总:共2条人员数据</td>
        </tr>
    </tfoot>
</table>

看看效果👉自己动手试一试 »

表格页脚 <tfoot>(Table Foot)

该元素定义表格的页脚,存放数据汇总、备注等内容。

注意:无论 <tfoot> 写在 <table> 中的哪个位置(甚至在<thead>之前、<tbody>之前),浏览器都会自动将其渲染到表格的底部。

示例:

<table border="1" width="500" cellspacing="0" cellpadding="8" align="center">
    <thead>
        <tr>
            <th>姓名</th>
            <th>年龄</th>
            <th>城市</th>
        </tr>
    </thead>
    <!-- 定义表格页脚 -->
    <tfoot>
        <tr>
            <td colspan="3">汇总:共2条人员数据</td>
        </tr>
    </tfoot>
    <tbody>
        <tr>
            <td>张三</td>
            <td>25</td>
            <td>北京</td>
        </tr>
        <tr>
            <td>李四</td>
            <td>28</td>
            <td>上海</td>
        </tr>
    </tbody>
</table>

看看效果👉自己动手试一试 »

表格行 < tr >(Table Row)

该元素定义表格中的一行,是单元格(<td>/<th>)的直接容器。

属性如下:

属性名取值作用
alignleft/center/right/justify行内所有单元格内容的水平对齐方式
valigntop/middle/bottom/baseline行内所有单元格内容的垂直对齐方式
bgcolor十六进制色值(如#f0f0f0)、颜色名(如gray)行的背景色

表头单元格 < th >(Table Header)

该元素定义表格的表头,存放列名、行名等说明性内容,提升表格可读性。

一个 <th> 表示表格中的表头单元格,用于描述数据的含义(如 “姓名”“成绩”“日期”),对搜索引擎和屏幕阅读器更友好。

属性如下:

属性名取值作用
scopecol/row/colgroup/rowgroup明确表头的作用范围,增强语义化
abbr简短文本(如“总分”对应“本次考试总分数”)表头内容的缩写,屏幕阅读器会优先读取该值

注意:浏览器自带表头默认样式 ——文字居中对齐、字体加粗,可通过 CSS 覆盖。

普通数据单元格 < td >(Table Data)

该元素表示表格中的一个普通数据单元格,对应具体的数值、文本等数据。

注意,该元素可以嵌套任意 HTML 元素(如<div>、<span>、<a>、甚至另一个<table>),灵活展示复杂内容。

属性如下:

属性名取值作用
colspan正整数(如2、3)跨列合并:合并同一行中相邻的N个列单元格
rowspan正整数(如2、3)跨行合并:合并同一列中相邻的N个行单元格

注意,除了上面两个属性外,还支持 align、valign、bgcolor、width、height 属性。

完整实例

下面通过一个完整的实例了解如何使用 <table> 元素,定一个美观的个人信息表格,如下:

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML教程</title>
    <style>
        /* ...省略样式... */
    </style>
</head>
<body>
    
    <table>
        <!-- 表格标题:说明表格用途 -->
        <caption>个人信息登记表</caption>

        <!-- 表格头部:定义列标题 -->
        <thead>
            <tr>
                <th scope="col" colspan="4">个人信息汇总表</th> <!-- 跨列合并4列,作为总表头 -->
            </tr>
            <tr>
                <th scope="col">信息类别</th>
                <th scope="col">具体项</th>
                <th scope="col">详情内容</th>
                <th scope="col">备注</th>
            </tr>
        </thead>

        <!-- 表格页脚:汇总说明(无论书写位置,浏览器自动渲染在底部) -->
        <tfoot>
            <tr>
                <td colspan="4">本表信息仅供个人展示使用,请勿用于商业用途 | 更新日期:2025年10月</td> <!-- 跨列合并4列 -->
            </tr>
        </tfoot>

        <!-- 表格主体:核心个人信息数据 -->
        <tbody>
            <!-- 第一组:基本信息(跨行合并2行) -->
            <tr>
                <th rowspan="5" class="merge-center">基本信息</th> <!-- 跨行合并5行,对应5条基本信息 -->
                <td>姓名</td>
                <td>张三</td>
                <td rowspan="5" class="merge-center">本人免冠照</td> <!-- 跨行合并5行,对应照片位置 -->
            </tr>
            <tr>
                <td>性别</td>
                <td>男</td>
            </tr>
            <tr>
                <td>出生日期</td>
                <td>1995-06-18</td>
            </tr>
            <tr>
                <td>民族</td>
                <td>汉</td>
            </tr>
            <tr>
                <td>籍贯</td>
                <td>江苏省·南京市</td>
            </tr>

            <!-- 第二组:联系方式(跨列合并演示) -->
            <tr>
                <th rowspan="3" class="merge-center">联系方式</th>
                <td>手机号码</td>
                <td>138****1234</td>
                <td>常用联系方式</td>
            </tr>
            <tr>
                <td>电子邮箱</td>
                <td>zhangsan@example.com</td>
                <td>工作/学习专用</td>
            </tr>
            <tr>
                <td>通讯地址</td>
                <td colspan="2">北京市朝阳区XX小区XX号楼XX单元(跨列合并2列展示完整地址)</td> <!-- 跨列合并2列 -->
            </tr>

            <!-- 第三组:技能特长(混合合并演示) -->
            <tr>
                <th rowspan="2" class="merge-center">技能特长</th>
                <th scope="row" class="merge-center">专业技能</th>
                <td>编程开发</td>
                <td>HTML/CSS/JavaScript、Python</td>
            </tr>
            <tr>
                <th scope="row" class="merge-center">综合能力</th>
                <td colspan="2">团队协作、项目管理、英语口语流利(跨列合并2列)</td> <!-- 跨列合并2列 -->
            </tr>
        </tbody>
    </table>

</body>
</html>

看看效果👉自己动手试一试 »

运行示例,效果如下图:

image.png

注意,关于CSS相关知识将在CSS教程中进行详细介绍。

关于更多HTML相关知识请继续学习后续知识……

 

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号