表格处理


表格样式

表格伸缩

使用 table-layout 属性可以设置表格的伸缩方式,它有以下两个值:

描述
auto默认值,列之间会自动伸缩,内容多的列会挤压其他列。
fixed固定每个列宽度相同,但是必须设置表格宽度 width 才能生效。

比如:

<style>
  table,
  td,
  th {
    border: 1px solid black;
  }
</style>
<table>
  <tr>
    <th>列 1</th>
    <th>列 2</th>
    <th>列 3</th>
  </tr>
  <tr>
    <td>一段很长很长很长很长很长很长很长很长的文本</td>
    <td>文本,文本</td>
    <td>文本,文本,文本</td>
  </tr>
</table>

上面的表格中,表格的内容会自动拉伸,如果设置宽度,内容多的列会挤压其他列,比如添加以下样式:

table {
  width: 300px;
}

上面样式作用后,表格会发生明显的挤压,可以设置表格布局方式为 fixed 来使每列宽度一致:

table {
  width: 300px;
  table-layout: fixed;
}

如果去除表格 width 属性,fixed 布局方式会无效。

间隙

使用 border-spacing 属性可以设置单元格之间的间隙。

比如设置单元格间隙为 0:

table {
  width: 300px;
  table-layout: fixed;
  border-spacing: 0;
}

虽然表格间隙会消失,但是单元格之间的 border 并不会合并,单元格的边框被设置成了两倍。

边框塌陷

使用 border-collapse 属性可以设置表格内部边框的塌陷模式,它有以下两个值:

描述
separate默认值,分离模式,相邻边框不会合并
collapse塌陷模式,相邻边框会产生合并,单元格之间的间隙会消失,border-spacing 属性将会失效

在上一节代码的基础上,修改一下样式:

table {
  width: 300px;
  table-layout: fixed;
  border-collapse: collapse;
}

你会发现表格间隙消失了,并且单元格之间的 border 产生了合并。

单元格内容垂直对齐

可以使用 vertical-align 来垂直对齐单元格中的内容,它有很多值,但是在表格单元格内常用的值只有 3 个:

描述
top内容对齐到单元格的上方
middle内容对齐到单元格的中间
bottom内容对齐到单元格的下方
<style>
  td {
    border: 1px solid silver;
    width: 100px;
    height: 100px;
    /* 单元格的内容会被显示到单元格的最下方 */
    vertical-align: bottom;
  }
</style>
<table>
  <tr>
    <td>单元格</td>
    <td>单元格</td>
  </tr>
</table>

vertical-align 不止在单元格中可以是垂直对齐,它还可以设置在 IFC 环境当中,在 【基础布局】 一节会有所介绍。

空单元格

☹ 这个属性并不常用

使用 empty-cells 属性可以设置空单元格的显示状态,它有两个值:

描述
show默认值,显示空的单元格
hide隐藏空的单元格,保留布局的位置

例子:

<style>
  td {
    border: 2px solid silver;
  }
  table {
    /* 空的单元格会被隐藏,但是不影响表格布局 */
    empty-cells: hide;
  }
</style>
<table>
  <tr>
    <td></td>
    <td>单元格</td>
  </tr>
  <tr>
    <td>单元格</td>
    <td></td>
  </tr>
</table>

标题位置

☹ 这个属性并不常用

使用 caption-side 可以 caption 元素在表格中显示的位置,它有两个值:

描述
top默认值,标题在表格的上方
bottom标题在表格的下方
<style>
  td {
    border: 2px solid silver;
  }
  table {
    /* 让标题放到表格的最下面 */
    caption-side: bottom;
  }
</style>
<table>
  <caption>
    标题
  </caption>
  <tr>
    <td>单元格</td>
    <td>单元格</td>
  </tr>
</table>

表格设计

一般情况下,我们都会使用塌陷模式的表格,这样表格会更加紧凑,边框合并也利于样式设置。

在盒模型一节介绍过,表格内的边框只有 th,td,caption 元素会正常显示,同时也只有他们能够设置 padding 属性,表格内的元素是无法设置 margin 的,单元格的间隙使用 border-spacing 来设置。

一个常见的表格样式设计如下:

.my-table {
  border-collapse: collapse;
}
.my-table td,
.my-table th {
  border: 1px solid rgb(196, 196, 196);
  padding: 5px 15px;
}
.my-table tr:hover {
  background-color: rgb(241, 241, 241);
}