# HTML5教程 - 11 表格

在 HTML 中,表格一般用于按照行和列的方式显示数据。

# 11.1 表格的完整结构

一个表格完整的结构,通常包括下面几个部分:表格标题、表格头部、表格主题、表格脚注

在 HTML 中,表格不同的部分使用不同的标签,对应关系如下:

  • 表格标题、头部、主体、脚注分别对应不同的标签:<caption><thead><tbody><tfoot>
  • 表格头部、主体、脚注部分内部是一行一行,对应 <tr> 标签,行中嵌套列,对应 <th> (头部部分)和 td 标签(主体和脚注部分);
  • 表格的标题、头部、脚注都是可以省略的,不影响表格的显示。

下面就以上面的表格,使用 HTML 来编写:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>表格</title>
  </head>

  <body>
    <table>
      <!-- 表格标题 -->
      <caption>
        员工信息
      </caption>

      <!-- 表格头部 -->
      <thead>
        <!-- 行 -->
        <tr>
          <!-- 列 -->
          <th>姓名</th>
          <th>性别</th>
          <th>年龄</th>
          <th>学历</th>
        </tr>
      </thead>

      <!-- 表格主体 -->
      <tbody>
        <!-- 第1行数据 -->
        <tr>
          <!-- 列 -->
          <td>张三</td>
          <td></td>
          <td>35</td>
          <td>本科</td>
        </tr>
        <!-- 第2行数据 -->
        <tr>
          <td>李四</td>
          <td></td>
          <td>24</td>
          <td>硕士</td>
        </tr>
        <!-- 第3行数据 -->
        <tr>
          <td>王五</td>
          <td></td>
          <td>42</td>
          <td>大专</td>
        </tr>
      </tbody>

      <!-- 表格脚注 -->
      <tfoot>
        <!-- 行 -->
        <tr>
          <!-- 列 -->
          <td>总计:3人</td>
          <td></td>
          <td></td>
          <td></td>
        </tr>
      </tfoot>
    </table>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  • 表格的头部、主体和脚注部分,都是行,然后行中嵌套列,也就是最小的单元格部分。

显示如下:

# 11.2 表格常用属性

# 1 边框

在上面的表格没有边框,可以通过 <table> 标签的 border 属性来添加边框。

<table border="1">
1
  • border="1" 表示 1 像素。

显示如下:

可以看到,设置 boder1,改变的是每个单元格的边框和表格整体外部的边框,每个单元格之间是有间隙的。

如果将 border 设置大于1,那么只改变表格整体外部的边框,每个单元格的边框还是 1,例如将 boder 的值改为 10 :

<table border="10">
1

显示如下:

所以通过 boder 属性是无法改变单元格边框的,得通过 CSS 来调整。

# 2 宽度

可以通过 <table> 标签的 width 属性来设置表格的整体宽度。

<table border="1" width="600">
1
  • width="600" 表示表格的整个宽度是 600 像素。

显示如下:

# 3 高度

可以通过 <table> 标签的 height 属性来设置表格的整体高度。

<table border="1" width="600" height="300">
1
  • height="300" 设置的是表格整体的高度最少为 300 像素,但是不会调整表格头部和脚注的高度,剩余到高度归为主体部分。说高度最少为300像素,待会后面讲 thead 的高度再说。

显示如下:

# 4 单元格间距

上面设置边框以后,会看到每个单元格之间存在间距,可以通过 <table> 标签的 cellspacing 属性来设置表格的单元格间距。

<table border="1" width="600" cellspacing="0">
1
  • cellspacing="0" 设置的是单元格间距为 0,那么每个单元格会靠在一起,但是需要注意,单元格的间隙为0,不是将边框合并。

所以显示如下,单元格的边框靠在了一起:

如果要合并边框,那么需要 CSS 来设置了。

# 11.3 thead属性

# 1 高度

<thead> 标签上,设置 border、width、cellspacing 都是不生效的,但支持设置 height。

举个栗子:

<table border="1" width="600" height="300" cellspacing="0">
      <!-- 其他:略 -->
  
      <!-- 表格头部设置高度 -->
      <thead height="300">
        
      <!-- 其他:略 -->
1
2
3
4
5
6
7

显示如下:

上面设置了表格头部高度为 300,表格的高度也是 300,那么表格的头部确实是 300 像素,那么表格的整体高度肯定是大于 300 的,也就是说变为最少 300 像素了。

# 2 对齐方式

表格头部的内容的对齐方式默认是水平居中垂直居中

可以通过如下属性修改水平方向和垂直方向的对齐方式:

  • align:修改水平方向的对齐方式,可以设置为:leftcenterright ,对应左、中、右;
  • valign:修改垂直方向的对齐方式,可以设置为:topmiddlebottom,对应上、中、下;

举个栗子:

<!-- 设置水平居右,垂直居下 -->
<thead height="100" align="right" valign="bottom">
1
2
  • 上面设置头部对齐方式为水平居右,垂直居下。

显示如下:

# 11.4 tfoot属性

tfoot 的属性和 thead 的属性是一样的,支持 heightalignvalign,但是默认的水平对齐方式是居左对齐。

<tfoot height="50" align="center" valign="middle">
1
  • 上面设置水平对齐方式为居中,垂直居中。

显示如下:

# 11.5 tbody属性

tbody 的标签也支持设置 heightalignvalign

举个栗子:

<table border="1" width="600" height="300" cellspacing="0">
  <thead height="100">
  <!-- 其他:略 -->
  
  <!-- 重点,看这里!!! -->
  <tbody height="50" align="center" valign="middle">
    
  <!-- 其他:略 -->
  <tfoot height="50" align="center" valign="middle">
1
2
3
4
5
6
7
8
9
  • 上面设置了 tbody 高度 50,内容水平和垂直居中。

显示如下:

虽然设置了 tbody 部分的高度是50,但是没有生效,因为设置了表格的整体高度最少为 300,头部高度为100,脚注部分高度为50,那么剩余的高度 300 - 100 - 50 = 150 的高度都是属于 tbody 的,只有设置 tbody 的高度大于 150 ,才能看出效果。

当然,如果不设置表格的整体高度,那么设置了 tbody 的高度为 50 也是不生效的,因为显示中间三行数据,也是要超过50像素的,所以只有设置超过数据显示的高度,才有效果。

# 11.6 tr属性

<tr> 标签是行,也支持设置 heightalignvalign 属性。

举个栗子:

<table border="1" width="600" cellspacing="0">
  <tbody>
        <!-- 第1行数据 -->
        <tr height="100" align="center" valign="middle">
1
2
3
4
  • 上面设置了第一行数据的高度、内容水平和垂直居中。

显示如下:

# 11.7 th和td属性

<th><td> 标签都是单元格,只是 <th> 是表格头部中单元格。

<th><td> 标签支持设置 widthheightalignvalign 属性。

如果给<th><td> 标签支持设置 widthheight ,将会改变所在那一列或一行的宽度和高度。

举个栗子:

<table border="1" width="600" cellspacing="0">
      <!-- 表格标题,略 -->
      <!-- 表格头部,略 -->
  
      <!-- 表格主体 -->
      <tbody>
        <!-- 第1行数据 -->
        <tr height="50" align="center" valign="middle">
          <!-- 列 -->
          <td width="100" height="100" align="right" valign="bottom">张三</td>
1
2
3
4
5
6
7
8
9
10
  • 上面设置了 <td> 的宽度和高度,那么将改变所在行的高度、所在列的宽度;当然对齐方式只改变单元格自己。
  • 修改表格头部的 <th> 效果也是一样的。

显示如下:


如果给同一行的多个 <td> 设置高度,那么最大值生效;

如果给同一列的多个 <td> 设置宽度,那么最大值生效;

<table border="1" width="600" cellspacing="0">
      <!-- 表格标题,略 -->
      <!-- 表格头部,略 -->

      <!-- 表格主体 -->
      <tbody>
        <!-- 第1行数据 -->
        <tr height="50" align="center" valign="middle">
          <!-- 列 -->
          <td width="100" height="100" align="right" valign="bottom">张三</td>
          <td height="200"></td>
          <td>35</td>
          <td>本科</td>
        </tr>
        <!-- 第2行数据 -->
        <tr>
          <td width="200">李四</td>
          <td></td>
          <td>24</td>
          <td>硕士</td>
        </tr>
        <!-- 略 -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • 上面对 张三 所在的 <td> 设置了高度 100,但是在同一行第二列也设置了高度 200,那么将使用最大值 200;
  • 张三 所在的 <td> 设置了宽度 100,但是在同一列第二行也设置了宽度 200,那么将使用最大值 200;

显示如下:


**上面对表格的各种显示效果进行了设置,例如边框、宽、高等,但是在实际的开发中,这些都不会使用的,对表格样式的各种调整,都是通过 CSS 来控制的。**这里学习的属性了解一下,后面学习 CSS 吧。

# 11.8 跨行与跨列

实现下面这个单元格:

  • 上面的表格 张三 和 李四 的姓名需要跨 3 行,最后一行的总计,需要跨 3 列。

实现思路:

通过 <td> 标签的 rowspan 属性设置跨行, colspan 属性设置跨列。

所以实现上面的代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>表格</title>
  </head>

  <body>
    <table border="1" cellspacing="0">
      <caption>
        学生成绩
      </caption>

      <thead>
        <tr>
          <th width="200">姓名</th>
          <th width="200">课程</th>
          <th width="200">成绩</th>
        </tr>
      </thead>

      <tbody align="center" valign="middle">
        <!-- 第1行数据 -->
        <tr>
          <!-- 设置跨3行 -->
          <td rowspan="3">张三</td>
          <td>语文</td>
          <td>100</td>
        </tr>

        <tr>
          <!-- 这里被跨行了,所以这一行只有2个td -->
          <td>数学</td>
          <td>96</td>
        </tr>

        <tr>
          <!-- 这里被跨行了,所以这一行只有2个td -->
          <td>英语</td>
          <td>98</td>
        </tr>

        <tr>
          <!-- 设置跨3行 -->
          <td rowspan="3">李四</td>
          <td>语文</td>
          <td>95</td>
        </tr>

        <tr>
          <!-- 这里被跨行了,所以这一行只有2个td -->
          <td>数学</td>
          <td>100</td>
        </tr>

        <tr>
          <!-- 这里被跨行了,所以这一行只有2个td -->
          <td>英语</td>
          <td>99</td>
        </tr>
      </tbody>

      <!-- 表格脚注 -->
      <tfoot>
        <tr>
          <!-- 设置跨3列 -->
          <td colspan="3">总计:3人</td>
          <!-- 这里被跨列了,所以只有一个td -->
        </tr>
      </tfoot>
    </table>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  • 按照前面实现思路的图,设置指定的 <tb> 跨行和跨列,然后删除被跨行和跨列占用位置的 <tb> 即可。

显示如下:



这个章节介绍了太多表格相关的属性,其中关于表格样式的设置太多了,实际开发中都是通过 CSS 来设置的,这里了解一下即可。