HTML -- 表格内容

220 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情

表格是由行和列(表格数据)组成的结构化数据集。常用于展示同类结构下的多种数据,用于组织、对比和分析等。一般包括表头、数据行和表尾三部分。通过表格,可以快速轻松地查找指示不同类型数据之间某种联系的值。

表元素 -- <table>

<table>元素以表格的形式表示具有多个维度的数据

属性

<table>身上除了全局属性外,其余的属性皆被弃用了。虽然还能用,但是不推荐。

可访问性问题

在定义表格时通常需要提供一个内容清晰简洁的<caption>元素,以描述了表的用途(比如“xx年级xx班学生表”)。它可以帮助人们决定是需要阅读表内容的其余部分还是跳过它。同时也助于视力低下的人以及有认知问题的人通过辅助技术(如屏幕阅读器)进行导航。

对于某些过于复杂的表,最好将其拆分为一组较小的相关表,这些表不依赖colspanrowspan属性。除了帮助使用辅助技术的人了解表的内容之外,这也可能有助于有认知问题的人,他们可能难以理解表布局所描述的关联。

如果无法拆分表,请在<td>元素上使用idheaders属性的组合,以编程方式将每个表单元格与与该单元格关联的标头相关联。

表标题元素 -- <caption>

<caption>元素指定表的标题

使用说明

在使用<caption>元素时,其必须是其父<table>元素的第一个子元素。

<table>上使用CSSbackground-color属性时,<caption>不会起作用。如果希望两者有相同的背景颜色,也可以向<caption>元素添加background-color

表列组元素 -- <colgroup>与表列元素 -- <col>

<colgroup>元素定义表中的一组列。可用于将样式应用于整个列,而不是为每个单元格和每一行重复样式。

<col>元素定义表中的列和所有公共单元格上的公共语义

属性

<colgroup><col>身上均有一个span属性,值为一个正整数,其作用是一样的,都指定<colgroup>(或<col>)元素跨越的连续列数。如果不存在,则其默认值为1, 最大值为1000。如果<colgroup>中有一个或多个<col>元素,则不允许使用span属性。

注意:在<table>元素中使用<colgroup>时,<colgroup>必须出现在任何可选的<caption>元素之后,在任何<thead><th><tbody><tfoot><tr>元素之前。

表头元素 -- <thead>、表体元素 -- <tbody>以及表尾元素 -- <tfoot>

<thead>元素用于定义一组定义表列的头部的行

<tbody>元素用于封装一组表行<tr>元素),指示它们构成了表的主体(<table>)。

<tfoot>元素定义了一组表格中各列的汇总行

三者一起使用,以指定表的每个部分(表头、表体、表尾)。并且其内容只能包含零个或多个<tr>元素。

<tbody>使用说明

  • 如果表中包含<thead>,则<tbody>块必须紧跟在它之后。

  • 如果<tr>元素被指定在现有的<tbody>元素之外,作为<table>的直接子元素,浏览器将会生成一个<tbody>元素封装这些元素。

  • 当一个表显示在屏幕上下文中(例如窗口)无法完整显示整个表时(比如屏幕不够大),浏览器可以让用户滚动同一个父表的<thead><tbody><tfoot><caption>块的内容。

  • 每个表可以连续使用多个<tbody>,将大型表中的行划分为部分,如果需要,每个部分可以单独格式化。如果<tbody>不是连续的话,浏览器将纠正此作者错误,确保任何<thead><tfoot>元素分别呈现为表的第一个和最后一个元素。

注意:

  1. <thead>必须出现在任何<caption><colgroup>元素之后,甚至是隐式定义的元素,但出现在任何<tbody>(内嵌表格),<tfoot><tr>元素之前。
  2. <tfoot>必须出现在任何<标题><colgroup><thead><tbody><tr>元素之后

<tr><th><td>

<tr>元素定义表格中的行。然后可以使用<td><th>元素来建立一行中的单元格。

<th>元素将单元格定义为一组表格单元格的标题。

<td>元素定义包含数据的表的单元格。

属性

<th>属性

属性名简介
abbr此属性包含单元格内容的简短缩写说明。
headers值为空格分隔的字符串列表,每个字符串对应于应用于此元素的<th>元素的id属性。
colspan值为一个非负整数值,该值指示单元格扩展的列数。其默认值为 1。
rowspan值为一个非负整数值,该值指示单元格扩展的行数。其默认值为 1。
scope定义了<th>元素(在<th>中定义)所关联的单元格。

colspan的值大于1000将被视为不正确,并将设置为默认值1

  • scope属性允许的值有:

    1. row<th>与其所属行的所有单元格相关。
    2. col<th>与其所属列的所有单元格相关。
    3. rowgroup<th>与其所属行组的所有单元格相关。
    4. colgroup<th>与其所属列组的所有单元格相关。

    如果没有指定scope属性,或者它的值不是rowcolrowgroupcolgroup,那么浏览器会自动选择头单元格应用的单元格集。

    scope属性在简单上下文中是多余的,因为范围是推断的。指定<th>的范围主要是改善使用辅助技术的人的体验,因为某些辅助技术可能无法得出正确的推论。在复杂的表格中,可以指定范围以提供有关与标题相关的单元格的必要信息。

<td>属性

属性名简介
headers值为空格分隔的字符串列表,每个字符串对应于应用于此元素的<th>元素的id属性。
colspan值为一个非负整数值,该值指示单元格扩展的列数。其默认值为 1。
rowspan值为一个非负整数值,该值指示单元格扩展的行数。其默认值为 1。

辅助技术(如屏幕阅读器)可能难以分析过于复杂的表,导致无法以严格的水平或垂直方式关联标题单元格。因此通常需要在<td>元素上使用colspanrowspan属性的存在来指示。

其余注意点与<th>属性类似。

<table>使用示例

不应该使用HTML表格的场景

HTML表格的设计目的是用于表格数据。过去很多人常常滥用HTML表格来布置网页,例如一行包含标题,一行包含内容列,一行包含页脚等。

使用表格而不是CSS布局技术是不好的做法,主要原因如下:

  1. 布局表格会影响可访问性:有视力障碍的用户使用的屏幕阅读器会解析HTML页面中存在的标记,并将内容读出给用户。但是表格不是正确的布局工具,并且标记表格比CSS布局技术更复杂,因此屏幕阅读器的输出会让用户感到困惑。

  2. 表格产生标签汤:表格布局通常涉及比适当的布局技术更复杂的标记结构。这可能会导致代码更难编写、维护和调试。

  3. 表格不会自动响应:当使用适当的布局容器(如<header><section><article><div>时,其宽度默认为其父元素的100%。默认情况下,表格的大小由其内容决定,因此需要采取额外的措施来使表格布局样式有效地跨各种设备工作。

参考资料