对于那些刚接触CSS布局的人来说,常对如何使用表格(table)感到迷惑。我在很多地方看到人们把“避免用表格来布局”理解成“完全不使用table标签”。值得注意的是,表格是可以用的而且非常好用——只要用的正确。
是的,你得尽量的去避免用表格来布局。但是对于表格型数据,你就应该使用table。我想谈谈如何使用表格来组织表现表格型数据。在HTML和XHTML里,表格不仅仅是行(row)和单元格(cell),还有很多其他元素,特别是如果你想让数据更加容易理解。
首先来点背景知识,“避免用表格来布局”这句话可以在HTML 4.01 规范的表格介绍部分里面找到:
这样已经很明白了,尽管文档中说“应该”而不是“必须”,所以这个规范还是有弹性的。
但是本文并不是讨论是否使用表格布局,而是使用表格来组织表现表格型数据——这是表格诞生的本意。
当表格用来组织实际的数据时,不仅仅是一个编排布局的格子而已。一般人可以从表格的编排和表现上看出标题和数据单元格之间的关系。盲人或者有视觉障碍的人则不能做到这一点。如果一个表格要让那些使用屏幕阅读器或用其他非可视用户代理(UA)的人们能够理解,它则需要告诉用户代理它包含的信息之间是如何联系起来的。
幸运的是,HTML在这方面提供了很多元素和属性。然而,使用这些可以增强易用性和语义化的功能比较难而且本身不容易理解。在本文中,我尝试着解释如何使用他们。
表头, <th>
让我们从一个非常简单的表格开始——只包含一行表头和两行三列的数据。如果用以前流行的做法,只用表格的行和单元格,写出来就如下:
<table>
<tr>
<td>公司</td>
<td>雇员</td>
<td>成立于</td>
</tr>
<tr>
<td>ACME Inc</td>
<td>1000</td>
<td>1947</td>
</tr>
<tr>
<td>XYZ Corp</td>
<td>2000</td>
<td>1973</td>
</tr>
</table>
没有边框和修饰,那么上面的代码在你现在的浏览器里看起来就如下:
<table> <tbody> <tr> <td>公司</td> <td>雇员</td> <td>成立于</td> </tr> <tr> <td>ACME Inc</td> <td>1000</td> <td>1947</td> </tr> <tr> <td>XYZ Corp</td> <td>2000</td> <td>1973</td> </tr> </tbody> </table>用CSS稍微修饰一下表格,你可以使表头在图形化浏览器里面更加明显:
<th id="employees" colspan="2">Employees</th> <th id="founded" rowspan="2">Founded</th> </tr> <tr> <th id="men">Men</th> <th id="women">Women</th> </tr> <tr> <th id="acme">ACME Inc</th> <td headers="acme employees men">700</td> <td headers="acme employees women">300</td> <td headers="acme founded">1947</td> </tr> <tr> <th id="xyz">XYZ Corp</th> <td headers="xyz employees men">1200</td> <td headers="xyz employees women">800</td> <td headers="xyz founded">1973</td> </tr> </tbody> </table> |