如何使用 CSS 给表格添加样式

作者选择了 多样性在技术基金作为 写给捐款计划的一部分接受捐款。

介绍

在CSS存在之前,<table>元素是创建丰富的设计布局的唯一可能途径,但创建具有<table>的布局并不是其预期的或理想的用途。现在,更好的布局选项可用,开发人员可以使用<table>元素将表数据作为预期的呈现,就像表格一样。

好的格式化HTML为浏览器提供信息,并允许浏览器为用户提供最佳界面. 虽然本教程将专注于设计表的视觉方面,有效的表HTML确保所有用户,包括有视力,非视力和其他情况的用户,将能够导航和理解表信息。

在本教程中,您将通过一个<table>元素的样式示例。本教程的第一半将专注于一个常见的表布局,该布局主要使用浏览器的表元素的默认风格。浏览器的默认风格是与CSS合作的起点,所以重要的是要知道它们是什么。第二半将重塑表,以便为每个部分使用独特的风格。在教程的结束时,您将建立一个具有X轴和Y轴表头的不同风格的表,交替的行颜色,表的清晰标题和突出数据点,如下图所示:

Table of financial information with custom style that renders a sans-serif font, a black header row, blue row headers, and different shading values for each row.

前提条件

您可以通过阅读 How To Apply CSS Styles to HTML with Cascade and Specificity 了解 CSS 的类型选择器、组合器选择器和特定特性,您可以在 How To Select HTML Elements to Style with CSS 阅读。 一个空的 HTML 文件,存储在您的本地机器上作为 index.html,您可以从您所选择的文本编辑器和 Web 浏览器访问。 要开始,请参阅我们的 How To Set Up Your HTML Project 教程,并遵循 How To Use and Understand HTML Elements 有关如何在您的浏览器中查看 HTML 的说明。 如果您是新的 HTML,请尝试整个 [How To Bu

设置< 表 > HTML

在你可以设计一个<table>之前,你需要一个可以使用的元素。在一个<table>元素中可能存在的元素有很多。<table>元素是HTML语义的最佳例子之一,因为它只有在它内部有与表相关的下行元素时才起作用。

要开始,请在文本编辑器中打开index.html,并在以下代码块中添加HTML:

 1[label index.html]
 2<!doctype>
 3<html>
 4  <head>
 5    <title>2019 Fourth Quarter Report</title>
 6    <link href="styles.css" rel="stylesheet" media="all" />
 7  </head>
 8  <body>
 9    <table>
10    </table>
11  </body>
12</html>

您将从此向前添加的所有HTML都将进入<table>元素中。<table>元素本身只定义了表内容区域,并且必须有其内部的特定元素才能正常工作。<link>元素引用您以后添加的styles.css文件,并将CSS加载到页面上生成风格。

首先,您将添加<caption>元素到<table>元素中,里面包含2019年第四季度报告**的文本。

1[label index.html]
2...
3<table>
4  <caption>2019 Fourth Quarter Report</caption>
5</table>
6...

请确保将此元素纳入您的表中,因为它为使用辅助技术的用户提供有用的信息,例如屏幕阅读器。

接下来,将<thead><tbody>元素添加为<caption>元素的姐妹元素,如下一个代码块中突出的HTML中所示:

1[label index.html]
2...
3<table>
4  <caption>2019 Fourth Quarter Report</caption>
5  <thead></thead>
6  <tbody></tbody>
7</table>

「」元素等于「

」的「」元素,定义了标题信息的背景,就像「」元素一样,「」元素定义了表格内容所在的区域,在这两种情况下,它们定义了一个区域,但它们本身并不显示内容。

HTML 中的表是由行组成的,而不是列组成的,表中的每个单元格都包含在一个<tr>元素中,这些元素通常是<thead>,<tbody><tfoot>的后代,但如果不使用区域元素,也可以是<table>的直接后代。

回到文本编辑器中的index.html,添加一个单一的标题行和三个内容行,如下列代码块所示:

 1[label index.html]
 2...
 3<table>
 4  <caption>2019 Fourth Quarter Report</caption>
 5  <thead>
 6    <tr></tr>
 7  </thead>
 8  <tbody>
 9    <tr></tr>
10    <tr></tr>
11    <tr></tr>
12  </tbody>
13</table>
14...

最后两个元素在功能上是相似的,它们都是 HTML 结构中的最后一个元素,这意味着不同于以前的元素,它们可以包含非表元素。

」元素包含各个表数据点。「」定义内容为一行或一列的标题。表元素是HTML独一无二的,因为它们的标记结构直接与视觉结构相关联。当考虑表作为一个表格时,<th><td>元素表现为单元格。为了在这个表中有四个列,每个<tr>元素都需要有四个<td><th>元素,不超过四个。

从以下代码块中添加突出的 HTML 到您的 index.html 文件:

 1[label index.html]
 2...
 3<table>
 4  <caption>2019 Fourth Quarter Report</caption>
 5  <thead>
 6    <tr>
 7      <th><!-- Intentionally Blank --></th>
 8      <th>October</th>
 9      <th>November</th>
10      <th>December</th>
11    <tr>
12  </thead>
13  <tbody>
14    <tr>
15      <th>Projected</th>
16      <td>$820,180</td>
17      <td>$841,640</td>
18      <td>$732,270</td>
19    </tr>
20    <tr>
21      <th>Actual</th>
22      <td>$850,730</td>
23      <td>$892,580</td>
24      <td>$801,240</td>
25    </tr>
26    <tr>
27      <th>Utilization</th>
28      <td>83%</td>
29      <td>90%</td>
30      <td>75%</td>
31    </tr>
32  </tbody>
33</table>
34...

<$>[注] 注: 与表格软件一样,有时可能需要将单元格合并,例如当单个单元格占用两个列时。

现在你已经写出你的表格,保存文件,然后,在你的网页浏览器中打开 `index.html. 下面的图像描绘了浏览器默认风格的这个表格将如何看起来,当加载到 Firefox 网页浏览器:

Information arranged into a table, but with no dividing lines and with default serif font.

在本节中,您为表数据设置了HTML。您了解了表如何由一系列元素组成,以不同的顺序组合,以创建一个可访问的数据集。

使用边界边界崩溃创建初始表格风格

设计表的第一步是了解一些浏览器的默认风格和行为,本节将涵盖边界属性和边界崩溃属性,并展示如何在单元格之间创建边界线。

要开始样式化您的表格,请在文本编辑器中创建并打开名为styles.css的文件,在与index.html相同的文件夹中。 添加一个由th元素选择器和td元素选择器组成的选择器组。 然后,在选择器块中,添加一个具有1px固体黑色值的边界属性,如下列代码块所示:

1[label styles.css]
2th, td {
3  border: 1px solid black;
4}

将您的更改保存到styles.css,然后在您的 Web 浏览器中打开index.html。而不是一个凝聚式网格,将有几个框具有自己的边界。下面的图像描述了表如何在 Web 浏览器中出现:

Default borders separated table with borders style of 1px black solid.

要更改此默认设置,请返回到文本编辑器中的styles.css,并将元素选择器添加到文件的顶部。然后,在选择器块中,应用边界崩溃属性。 此属性默认为分开,但在这里你会将其更改为崩溃值。 这会消除表单元格之间的间隔,并导致边界重叠。 以下代码块中的突出CSS显示了你要添加到你的styles.css文件的内容:

1[label styles.css]
2table {
3  border-collapse: collapse;
4}
5
6th, td {
7  border: 1px solid black;
8}

打开您的网页浏览器,更新index.html。 该表现在将有一个网格,由多个交叉的黑线定义。 以下图像描述了边界将如何出现在您的浏览器:

Table with no space between cells and a border style of 1px black solid.

在本节中,您使用边界属性将边界应用于每个表单元格中,使用thtd元素选择器。您还了解到,默认情况下,表单单元格由一个空间分开。

设置桌子的尺寸

接下来,您将为表单元格添加一些间隔,以使数据更易于读取. 为了解决将白色空间添加到表单元格并使表格更加平衡,本节将专注于宽度粘贴属性。

从现在开始,每个单元格的内容都被堆积起来,边界就在内容的顶部。您可能也注意到表只有其内容的宽度。 <table> 有自己的显示属性: display: table. 要使表走到母容器的整个宽度,可以添加一个 width: 100%table 选择器。

由于这是一个相对较小的表,所以不需要将宽度属性添加到<table>元素中。相反,请在文本编辑器中打开styles.css并添加一个组合选择器,其中包括thead th,该组合将风格扩展到<th>元素中的<thead>元素中。

1[label styles.css]
2...
3th, td {
4  border: 1px solid black;
5}
6
7thead th {
8  width: 25%;
9}

由于本表中有四个列,您可以通过应用宽度: 25 %来给每个列提供相同的宽度。 只需要设置每个列的第一个单元格,因此需要选择thead th

将更改保存到 styles.css 后,返回浏览器并更新 index.html. 表现在将有相同宽度的四个列,如下图像所示:

Set equal column widths

<$>[注] 注: 如果您希望每个列都有不同的宽度,请将特定类应用于列中的每个th

现在,由于列的宽度相等,每个单元格的内容可以通过使用粘贴属性来使用更多空间。

在文本编辑器中打开styles.css,并将一个padding属性添加到th, td的组选择器中,然后给它一个值为8px

 1[label styles.css]
 2...
 3th, td {
 4    border: 1px solid black;
 5    padding: 8px;
 6}
 7
 8thead th {
 9  width: 25%;
10}

将您的更改保存到styles.css,然后在浏览器中刷新index.html。在每个单元格的每个侧面添加了8px插件,为表数据提供更易读的空间。

Adding space within cells.

<$>[注] 注: 表单元格的框模型与常规模型不相同,并且不识别边缘属性。

在本节中,您将每个列的宽度属性设置为等,并使用粘贴属性将间隔添加到每个单元格,以便更容易阅读数据。

瞄准特定表单元格

在此步骤中,目标是视觉地突出表中的单元格之一,您将在HTML中应用一个类名称,然后使用类选择器和背景颜色属性来创建突出效果。

首先,在文本编辑器中打开index.html,并将一个属性添加到<td>元素中,里面包含文本 90%

 1[label index.html]
 2<table>
 3  ...
 4  <tr>
 5    <th>Utilization</th>
 6    <td>83%</td>
 7    <td class="cell-highlight">90%</td>
 8    <td>75%</td>
 9  </tr>
10  ...
11</table>

将您的更改保存到index.html,然后在文本编辑器中打开styles.css。 将.cell-hightlight 的类选择器添加到文件的末尾。 选择器块内,添加一个具有黄金值的背景色属性。 然后,添加一个字体重量属性,该值设置为bold。 以下代码块中的突出 CSS 显示了该属性的格式化:

 1[label styles.css]
 2...
 3thead th {
 4  width: 25%;
 5}
 6
 7.cell-highlight {
 8  background-color: gold;
 9  font-weight: bold;
10}

将更改保存到styles.css,然后返回 Web 浏览器并更新index.html。如下图像所示,包含 **90%**的表单单元格现在具有深黄色背景和大胆的字体重量:

A table with gold highlighting on a specific cell.

现在,您已在特定表单元格上使用类选择器,使用背景颜色字体重量属性应用突出样式。

为桌子设置字体家族

要开始移动到表的最终风格,将边界移动到整个表周围,而不是单个单元格,然后为页面设置一个新的默认字体家族,并调整单个单元格的默认文本对齐。

要更新界限,请在文本编辑器中打开styles.css。然后,通过删除border: 1px solid black;属性和值来编辑现有的组选择器th, tr。这将从表中删除单元格界限,表格风格的第二阶段将保持相同。然后,在table类型选择器上,添加一个具有1px solid black值的border属性。下面的代码块展示了如何在你的代码中出现:

 1[label styles.css]
 2table {
 3  border-collapse: collapse;
 4  border: 1px solid black;
 5}
 6
 7th, td {
 8  padding: 8px;
 9}
10...

将更改保存到styles.css,然后返回浏览器以更新index.html。边界现在将围绕整个表而不是单个表单元格,如下图所示:

Table with a black border around the whole table but with no borders between the individual cells.

要更改整个文档的字体,请在文本编辑器中返回styles.css。在table选择器块之前,添加一个body类型选择器。在body选择器块中,添加font-family属性,值为sans-serif。这将将页面的字体设置为浏览器的默认 sans-serif字体,如Helvetica或Arial。下面的代码块中突出的CSS显示了styles.css的更改:

 1[label styles.css]
 2body {
 3  font-family: sans-serif;
 4}
 5
 6table {
 7  border-collapse: collapse;
 8  border: 1px solid black;
 9}
10...

将这些更改保存到styles.css,然后在浏览器中重新加载index.html。整个表格的字体现在将具有浏览器的默认 sans-serif字体,如下图像所示:

Table with all the default serif font changed to the default sans-serif font.

最后,要调整表内容的对齐,请在文本编辑器中返回styles.css。浏览器通常会将内容对齐设置为左上方位置。

要设置水平中间对齐,请进入类型选择器并添加文本对齐属性以中心的值。 然后,要设置垂直中间对齐,请添加垂直对齐属性以中间的值。 以下代码块的突出部分说明如何将此属性添加到styles.css:

 1[label styles.css]
 2body {
 3  font-family: sans-serif;
 4}
 5
 6table {
 7    border-collapse: collapse;
 8    border: 1px solid black;
 9    text-align: center;
10    vertical-align: middle;
11}
12...

将更改保存到 styles.css,然后返回 Web 浏览器以重新加载 index.html. 单元格内容现在将在单元格内横向和垂直中心。

垂直中心化不会立即显而易见,但如果一个单元格的内容被包裹到第二行,则行中的剩余单元格将垂直地对齐其内容。

下面的图像显示在浏览器中将如何显示:

Table with the contents of each cell horizontally and vertically centered within the cell.

在本节中,您将边界属性从表单元格移动到整个表中。您还为页面设置了一个新的字体组,并更改了表单单元格的内容的默认对齐。

标签: Table Caption

对于屏幕读者和布莱尔用户来说,一个<capitation>为表的目的提供明确的背景,特别是当页面上有多个表时。

由于

是一个仅发生在元素内部的元素,所以它可以用caption类型选择器进行样式化。

要开始更改<caption>元素的风格,请在文本编辑器中打开styles.css。在选择器后添加一个caption选择器,以便保持你的 CSS 在逻辑流程顺序。然后,使用字体重量,字体大小,文本对齐颜色的属性,创建一个大、大胆、左对齐和暗灰色的标签。以下代码块中的突出 CSS 展示了如何进行格式化:

 1[label styles.css]
 2table {
 3  border-collapse: collapse;
 4}
 5
 6caption {
 7  font-weight: bold;
 8  font-size: 24px;
 9  text-align: left;
10  color: #333;
11}
12
13th, td {
14  border: 1px solid black;
15  padding: 8px;
16}
17...

将您的更改保存到styles.css,并在浏览器中重新加载index.html。如下图像所示,标题内容现在更大和大胆,为表创建一个标题:

Table with caption left-aligned and bolded as the title.

接下来,在章节的视觉部分之间需要一些空间. 返回文本编辑器中的styles.css以添加额外的间隔到章节

标题可以接受边缘粘贴间隔属性. 由于仅需要在标题下方的间隔,请在选择器块中添加一个具有16px值的边缘底部属性。

1[label styles.css]
2caption {
3    font-weight: bold;
4    font-size: 24px;
5    text-align: left;
6    color: #333;
7    margin-bottom: 16px;
8}

将您的更改保存到styles.css,并在 Web 浏览器中更新index.htmlcapitation现在在文本和表之间有更多的空间,如下图所示:

Table with space between the caption and the table itself.

在本节中,您为表的<capitation>元素创建了自定义风格,您还了解到<capitation>是为使用辅助技术阅读表的人提供信息背景的重要元素。

标签:Top Row Header Cells

接下来,你会将风格应用到顶部行标题. 元素<thead>将包含顶部行,所以所有风格可以直接应用到该元素。

要开始,请在文本编辑器中打开styles.css。创建一个新的thead类型选择器。在选择器块中,添加一个具有#333值的背景色属性,从而产生暗灰色。

 1[label styles.css]
 2...
 3caption {
 4  font-weight: bold;
 5  font-size: 24px;
 6  text-align: left;
 7  color: #333;
 8  margin-bottom: 16px;
 9}
10
11thead {
12  background-color: #333;
13  color: white;
14}
15...

将更改保存到 styles.css,并在浏览器中更新 `index.html。 顶部标题行现在具有视觉特征,具有坚实的黑色背景和大胆的白色文本。

Table with the table header row in dark gray with white lettering.

接下来,为了增加顶部标题的美感,请返回到文本编辑器中的styles.css。 通过添加一个具有0.875rem值的字体大小属性来更改文本的大小,这将使字体大小略降低。 然后,为了使所有字母都成为首位,请添加一个文本转换属性,作为值,添加uppercase。 最后,为了给字母之间一些空间,请使用字母间隔属性,并将值设置为2%。 这将为上面的字符之间创造足够的空间,以便它们不被堆积起来,使它们更容易阅读。

以下代码块中的突出CSS展示了如何格式化这些风格:

1[label styles.css]
2thead {
3    background-color: #333;
4    color: white;
5    font-size: 0.875rem;
6    text-transform: uppercase;
7    letter-spacing: 2%;
8}

将您的更改保存到styles.css,然后返回您的浏览器以更新index.html。如下图所示,文本现在是上面的,大小略小于单元格内容,但作为标题在等级上清晰:

Table with header row lettering changed to uppercase and adjusted for spacing.

在此步骤中,您使用了几种属性来为顶部标题行提供可识别的风格. 表的这个部分的HTML已经可供非视觉和有说服力的技术用户访问。

添加条形轮式风格到桌子上

接下来,要创建交替的条形颜色,你需要使用所谓的 假类类选择器。 存在各种类型的假类类,在这种情况下,你会使用的 :nth-child() 假类类。

首先,请在文本编辑器中打开styles.css:nth-child()假类类通过将其应用于兄弟类元素而起作用。在这种情况下,它将是<tbody>内部的<tr>元素。 要创建第一个值,请写一个tbody tr组合选择器,然后立即使用:nth-child(odd)假类类。 在这个选择器块中,将背景色属性设置为#fff,即白色的六十字缩写。 然后在相同格式中创建另一个选择器,但使用甚至而不是odd并将背面色属性设置为轻灰色#eee值。

以下代码块中的突出CSS显示了这将在文本编辑器中显示的样子:

 1[label styles.css]
 2...
 3.cell-highlight {
 4  background-color: gold;
 5  font-weight: bold;
 6}
 7
 8tbody tr:nth-child(odd) {
 9  background-color: #fff;
10}
11
12tbody tr:nth-child(even) {
13  background-color: #eee;
14}

将您的更改保存到styles.css,然后返回浏览器中的index.html,并更新页面。第二行现在将具有轻灰色背景,尽管它不会看起来不同,但奇怪的行现在有一个定义的白色背景,而不是默认的透明。当您添加行时,这些风格将从白色到轻灰色。

Table with alternating rows of white and gray background colors.

在本节中,您使用了:nth-child()假类类来创建表的身体部分中交替的行颜色. 在本教程的最后一节中,您将将将您在前两节中学到的内容配对在一起,以创建表的左侧的行头的自定义风格。

左侧头细胞模型

此表的最后一个样式是将蓝色背景添加到表的左侧的y轴标题中,这将发生在两个部分中:第一部分将类似于标题的顶部行通过针对每个行中的th单元格来样式化。

要应用主要的蓝色背景,请在文本编辑器中打开你的 styles.css 文件. 您需要针对 <th> 元素在 <tbody> 中,以便 <thead> 中的 <th> 元素无法获得这些风格。 创建一个 tbody th 的组合选择器,然后给它一个 背景颜色 属性和 #36c 的值。 应用一个 color 属性,其值为 #fffwhite。 最后,要将文本设置为左对齐,将一个 text-align 属性设置为 left 的值:

 1[label styles.css]
 2...
 3tbody tr:nth-child(even) {
 4  background-color: #eee;
 5}
 6
 7tbody th {
 8  background-color: #36c;
 9  color: #fff;
10  text-align: left;
11}

将您的更改保存为styles.css,然后在浏览器中更新index.html。如下图像所示,行标题现在具有独特的蓝色和白色文本:

Table with left-most column in blue with white lettering.

最后,要将交替的行颜色转移到行标题中,请在文本编辑器中返回 styles.css。 要实现与数据行相同的效果,您需要一个 :nth-child()假类选择器。 由于在tbody th组合器选择器上已经设置了蓝色背景,您只需要:nth-child(even)来调整到更深的蓝色。 然而,由于:nth-child()假类选择器是如何运作的,您仍然需要将其应用到tr> 元素,而不是 <th> 元素,因为行数是如何实现效果的。 这将需要一个更复杂的 tbody tr:nth-child(even) 组合器,具有 `back-ground

下面的代码块说明了这个 CSS 是如何格式化的:

 1[label styles.css]
 2...
 3tbody th {
 4  background-color: #36c;
 5  color: #fff;
 6  text-align: left;
 7}
 8
 9tbody tr:nth-child(even) th {
10  background-color: #25c;
11}

将您的更改保存到styles.css,然后最后一次返回您的浏览器,并更新index.html

Table with alternating shades of blue in the left-most column to match the rest of the table.

在本节中,您将风格分为行标题,并将以前的部分中所学到的内容转移到精确地瞄准交替背景颜色。

结论

您现在已经成功构建了一个表,并学习了几种实用的CSS属性和选择器类型,以适用于表数据。前进,您可以创建更复杂的表,以进一步处理这些概念。您还可以使用第九个孩子选择器在子弹列表或导航链接上创建交替风格。

如果您想阅读更多 CSS 教程,请尝试 How To Style HTML with CSS series中的其他教程。

Published At
Categories with 技术
Tagged with
comments powered by Disqus