您现在的位置是:网站首页> 编程资料编程资料

标准化——表格_CSS/HTML_

2023-05-25 273人已围观

简介 标准化——表格_CSS/HTML_

对于那些刚接触CSS布局的人来说,常对如何使用表格(table)感到迷惑。我在很多地方看到人们把“避免用表格来布局”理解成“完全不使用table标签”。值得注意的是,表格是可以用的而且非常好用——只要用的正确。

是的,你得尽量的去避免用表格来布局。但是对于表格型数据,你就应该使用table。我想谈谈如何使用表格来组织表现表格型数据。在HTML和XHTML里,表格不仅仅是行(row)和单元格(cell),还有很多其他元素,特别是如果你想让数据更加容易理解。

首先来点背景知识,“避免用表格来布局”这句话可以在HTML 4.01 规范表格介绍部分里面找到:

表格不应该纯粹的被用来布局文档内容,这样可能在处理渲染非可视媒体的时候产生问题。另外,当和图片一起使用的时候,这些表格可能在某个系统上显示过大而强迫用户拖动水平滚动条,为了减少这些问题,设计者应该使用样式表来控制布局而不是表格。

这样已经很明白了,尽管文档中说“应该”而不是“必须”,所以这个规范还是有弹性的。

但是本文并不是讨论是否使用表格布局,而是使用表格来组织表现表格型数据——这是表格诞生的本意。

当表格用来组织实际的数据时,不仅仅是一个编排布局的格子而已。一般人可以从表格的编排和表现上看出标题和数据单元格之间的关系。盲人或者有视觉障碍的人则不能做到这一点。如果一个表格要让那些使用屏幕阅读器或用其他非可视用户代理(UA)的人们能够理解,它则需要告诉用户代理它包含的信息之间是如何联系起来的。

幸运的是,HTML在这方面提供了很多元素和属性。然而,使用这些可以增强易用性和语义化的功能比较难而且本身不容易理解。在本文中,我尝试着解释如何使用他们。

表头,

让我们从一个非常简单的表格开始——只包含一行表头和两行三列的数据。如果用以前流行的做法,只用表格的行和单元格,写出来就如下:
















  1. 公司雇员成立于
    ACME Inc10001947
    XYZ Corp20001973

没有边框和修饰,那么上面的代码在你现在的浏览器里看起来就如下:

公司雇员成立于
ACME Inc10001947
XYZ Corp20001973

用CSS稍微修饰一下表格,你可以使表头在图形化浏览器里面更加明显:

公司雇员成立于
ACME Inc10001947
XYZ Corp20001973

一个视力正常的人,很容易并且很快就可以明白表头和数据单元格之间的关系。从另一方面讲,那些使用屏幕阅读器的人可以听到如下顺序的词:公司,雇员,成立于,ACME Inc,1000,1947,XYZ Corp,2000,1973。不是十分容易明白其中的关系。

第一步——最简单的——通过适当的标出表头来使得表格更加有意义。很简单:只要使用标签取代表头的标签即可。
















  1. 公司雇员成立于
    ACME Inc10001947
    XYZ Corp20001973
公司雇员成立于
ACME Inc10001947
XYZ Corp20001973

这个例子虽然简单,但是已经包含了足够的信息使得屏幕阅读器能够让使用者明白表头和数据单元格之间的关系。一个屏幕阅读器一般会这么读:公司: ACME Inc. ,雇员: 1000,成立于: 1947., 以此类推。比之前好多了。

表格标题,

标签可以为表格提供一个简短的说明,和图像的说明比较类似。默认情况下,大部分可视化浏览器显示表格标题在表格的上方中央。CSS里的caption-side属性用来控制表格标题显示的地方。大部分浏览器只能把表格标题显示在表格的上方或者下方,只有一些浏览器支持左边或者右边。这个就留给大家去试试了。

使用的时候,标签一定要紧接着开始的

标签写,如下:

















  • Table 1: Company data
    CompanyEmployeesFounded
    ACME Inc10001947
    XYZ Corp20001973
    Table 1: Company data
    CompanyEmployeesFounded
    ACME Inc10001947
    XYZ Corp20001973

    当然你也可以用CSS去样式化表格标题。然而,要在不同浏览器里获得同样的效果还需要一定的技巧,这个也留给各位去实践了。

    表格释义:summary属性

    一般人可以很容易的决定是否研究一下表格的细节,只要瞥一眼就可以看出表格有多大、大概有什么内容。但是使用屏幕阅读器的人就不是那么容易了,除非我们给表格加上summary属性。这样可以提供比标签更详细的描述。

    sumary属性的内容不会被可视化浏览器显示,所以可以尽可能的让描述足够长,使得那些用“听”的浏览者了解表格的内容。当然也不要用过头了,当有需要的时候才加上summary属性,比如对于很复杂的表格,添加一个summary属性可以使用屏幕阅读器人比较简单的了解表格的内容。

















    1. Table 1: Company data
      CompanyEmployeesFounded
      ACME Inc10001947
      XYZ Corp20001973

    缩写表头:abbr属性

    当屏幕阅读器遇到一个表格,每一行会把表头连每一个数据单元格一起读出来。如果表头很长,听一遍一遍的读是十分乏味的。通过使用abbr属性,可以给那些长的表头提供简写形式,取代表头的内容。abbr属性是可选的,大部分情况表头还是(或许是应该)比较简短的。

    稍微修改一下刚才的表格,让表头更长些,abbr属性就可以这样用:

















    1. Table 1: Company data
      Company NameNumber of EmployeesFoundation Year
      ACME Inc10001947
      XYZ Corp20001973
    Table 1: Company data
    Company NameNumber of EmployeesFoundation Year
    ACME Inc10001947
    XYZ Corp20001973

    对于第一行数据,屏幕阅读器会读表头的全称,而从第二行开始即使用简称。

    这样让数据表格适应布局是挺困难的,而以下的做法更为常见:即让表头尽可能的短,或者简写,使用title属性或者标签提供一个更长的说明。

    把表头和数据联系起来:scopeidheaders属性

    就我用到现在,很多表格要比上面提供的例子复杂的多。让例子复杂一点,我会移去“Company”表头,并且把第一列的数据移到表头单元格里:

















    1. Table 1: Company data
      EmployeesFounded
      ACME Inc10001947
      XYZ Corp20001973