文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网站建设Html网页Web标准化教程关于表格的应用
精品推荐
特别推荐
·用CSS控制浏览器的滚动条
·marquee标记的用法
·HTML语言:什么是Unicode 什么是UTF-8
·XHTML编写网页代码的七条基本规范
·HTML和XHTML的区别
·HTML语言:什么是Unicode?什么是UTF-8?
·HTML 和 XHTML 区别
·HTML标记全集
·分析比较:三种简洁的Tab导航简析
·HTML教程-HTML简介
·网页Web标准化教程关于表格的应用
·网页代码常用小技巧总结续,网页制作学习
·HTML 标记参考手册
·用htc实现html编辑器
·HTML 4.0 语言快速入门参考教程
·初学:什么是DIV+CSS?有什么优势?
·网页制作实例CSS用一张图片实现圆角
·DIV CSS网页布局学习中容易出现的问题汇总
·HTML标签语义 科学合理的运用HTML标签
·53个CSS-不可或缺的技巧
热点TOP10
·弹出窗口代码集萃
·html教学+HTML语法大全
·图片左右循环连续滚动代码,解决marquee的留白问题
·网页设计基础:Div+CSS布局入门教程
·下拉列表框1下拉列表框2(HTML版)
·HTML标记全集
·解析Html页面:HTML Parser的试用
·在HTML网页中添加WMV格式播放器代码
·中国地区三级联动下拉菜单代码和示例(附带代码下载)
·53个CSS-不可或缺的技巧
·HTML 标记参考手册
·页面显示问题
·用层模拟下拉列表框
·CSS标准网页设计UL和DIV使用的技巧总结
·可移动层的实现示例
·CSS 制作的三级菜单特效代码
·兼容标准XHTML的浮动层特效实现
·HTML及XML语言的转义字符
·HTML 4.0 语言快速参考
·分析比较:三种简洁的Tab导航简析

网页Web标准化教程关于表格的应用

日期:2007年8月8日 作者: 查看:[大字体 中字体 小字体]


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

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

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

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

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

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

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

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

表头, <th>

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

  1. <table>
  2. <tr>
  3. <td>公司</td>
  4. <td>雇员</td>
  5. <td>成立于</td>
  6. </tr>
  7. <tr>
  8. <td>ACME Inc</td>
  9. <td>1000</td>
  10. <td>1947</td>
  11. </tr>
  12. <tr>
  13. <td>XYZ Corp</td>
  14. <td>2000</td>
  15. <td>1973</td>
  16. </tr>
  17. </table>

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

公司 雇员 成立于
ACME Inc 1000 1947
XYZ Corp 2000 1973

用CSS稍微修饰一下表格,你可以使表头在图形化浏览器里面更加明显:
公司 雇员 成立于
ACME Inc 1000 1947
XYZ Corp 2000 1973

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

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

  1. <table>
  2. <tr>
  3. <th>公司</th>
  4. <th>雇员</th>
  5. <th>成立于</th>
  6. </tr>
  7. <tr>
  8. <td>ACME Inc</td>
  9. <td>1000</td>
  10. <td>1947</td>
  11. </tr>
  12. <tr>
  13. <td>XYZ Corp</td>
  14. <td>2000</td>
  15. <td>1973</td>
  16. </tr>
  17. </table>
公司 雇员 成立于
ACME Inc 1000 1947
XYZ Corp 2000 1973

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

表格标题, <caption>

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

使用的时候,<caption>标签一定要紧接着开始的<table>标签写,如下:

  1. <table>
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <th>Company</th>
  5. <th>Employees</th>
  6. <th>Founded</th>
  7. </tr>
  8. <tr>
  9. <td>ACME Inc</td>
  10. <td>1000</td>
  11. <td>1947</td>
  12. </tr>
  13. <tr>
  14. <td>XYZ Corp</td>
  15. <td>2000</td>
  16. <td>1973</td>
  17. </tr>
  18. </table>
Table 1: Company data
Company Employees Founded
ACME Inc 1000 1947
XYZ Corp 2000 1973

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

表格释义:summary属性

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

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

  1. <table summary="The number of employees and the foundation year of some imaginary companies.">
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <th>Company</th>
  5. <th>Employees</th>
  6. <th>Founded</th>
  7. </tr>
  8. <tr>
  9. <td>ACME Inc</td>
  10. <td>1000</td>
  11. <td>1947</td>
  12. </tr>
  13. <tr>
  14. <td>XYZ Corp</td>
  15. <td>2000</td>
  16. <td>1973</td>
  17. </tr>
  18. </table>

缩写表头:abbr属性

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

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

  1. <table summary="The number of employees and the foundation year of some imaginary companies.">
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <th abbr="Company">Company Name</th>
  5. <th abbr="Employees">Number of Employees</th>
  6. <th abbr="Founded">Foundation Year</th>
  7. </tr>
  8. <tr>
  9. <td>ACME Inc</td>
  10. <td>1000</td>
  11. <td>1947</td>
  12. </tr>
  13. <tr>
  14. <td>XYZ Corp</td>
  15. <td>2000</td>
  16. <td>1973</td>
  17. </tr>
  18. </table>
Table 1: Company data
Company Name Number of Employees Foundation Year
ACME Inc 1000 1947
XYZ Corp 2000 1973

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

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

把表头和数据联系起来:scope,id,headers属性

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

  1. <table summary="The number of employees and the foundation year of some imaginary companies.">
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <td></td>
  5. <th>Employees</th>
  6. <th>Founded</th>
  7. </tr>
  8. <tr>
  9. <th>ACME Inc</th>
  10. <td>1000</td>
  11. <td>1947</td>
  12. </tr>
  13. <tr>
  14. <th>XYZ Corp</th>
  15. <td>2000</td>
  16. <td>1973</td>
  17. </tr>
  18. </table>
Table 1: Company data
  Employees Founded
ACME Inc 1000 1947
XYZ Corp 2000 1973

在这个表格里,每一个数据单元格都有两个表头。最简单的方法让那些非可视的浏览器理解这个表格,就是为每个表头添加一个scope属性。

  1. <table summary="The number of employees and the foundation year of some imaginary companies.">
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <td></td>
  5. <th scope="col">Employees</th>
  6. <th scope="col">Founded</th>
  7. </tr>
  8. <tr>
  9. <th scope="row">ACME Inc</th>
  10. <td>1000</td>
  11. <td>1947</td>
  12. </tr>
  13. <tr>
  14. <th scope="row">XYZ Corp</th>
  15. <td>2000</td>
  16. <td>1973</td>
  17. </tr>
  18. </table>

Scope属性同时定义了行的表头和列的表头:

  • col: 列表头
  • row: 行表头

在第一行的<th>加上值为col的scope属性,声明他们是下面数据单元格的表头。同样的,给每行的开头<th>加上值为row的scope属性声明他们是右边数据单元格的表头。

Scope属性还有两个值:

  • colgroup: 定义列组(column group)的表头信息
  • rowgroup: 定义行组(row group)的表头信息

一个列组是由<colgroup>标签定义的。行组则是由<thead>、<tfoot>和<tbody>定义的。稍后我将会详细介绍它们。

如果你既想要保留“Company”表头,而又想让公司名字作为行表头(row headers)显示,你会怎么做?那样的话,应该使得包含公司名字的单元格同时提供表头和数据信息。也就是说,<td>标签也应该加上scope属性:

  1. <table summary="The number of employees and the foundation year of some imaginary companies.">
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <th scope="col">Company</th>
  5. <th scope="col">Employees</th>
  6. <th scope="col">Founded</th>
  7. </tr>
  8. <tr>
  9. <td scope="row">ACME Inc</td>
  10. <td>1000</td>
  11. <td>1947</td>
  12. </tr>
  13. <tr>
  14. <td scope="row">XYZ Corp</td>
  15. <td>2000</td>
  16. <td>1973</td>
  17. </tr>
  18. </table>

这样的话可视化浏览器不会默认的把company name显示为表头。所以需要用CSS来修正一下,就刚才那个例子,我使用了下面的CSS:

  1. td[scope] {
  2. font-weight:bold;
  3. }

要注意上面的规则使用了属性选择符,IE是不支持的。而通过添加一个class来样式化表头是个不错的办法。

Table 1: Company data
Company Employees Founded
ACME Inc 1000 1947
XYZ Corp 2000 1973

另一个连接表格数据单元格和表头的方法就是给每一个表头添加一个唯一的ID。然后为下面的数据单元格添加headers属性,这个headers属性值包含用空格分开的各个ID,这些ID代表的表头各自关联到该数据单元格上。这样做很复杂,只是当有超过两个表头的单元格才用。在复杂的和不规则的表格中,scope属性就力不从心了。

为了演示,我修改了一下表格,加上了公司雇员性别及人数:

  1. <table class="extbl" summary="The number of employees and the foundation year of some imaginary companies.">
  2. <caption>Table 1: Company data</caption>
  3. <tr>
  4. <td rowspan="2"></td>
  5. <th id="employees" colspan="2">Employees</th>
  6. <th id="founded" rowspan="2">Founded</th>
  7. </tr>
  8. <tr>
  9. <th id="men">Men</th>
  10. <th id="women">Women</th>
  11. </tr>
  12. <tr>
  13. <th id="acme">ACME Inc</th>
  14. <td headers="acme employees men">700</td>
  15. <td headers="acme employees women">300</td>
  16. <td headers="acme founded">1947</td>
  17. </tr>
  18. <tr>
  19. <th id="xyz">XYZ Corp</th>
  20. <td headers="xyz employees men">1200</td>
  21. <td headers="xyz employees women">800</td>
  22. <td headers="xyz founded">1973</td>
  23. </tr>
  24. </table>
Table 1: Company data
  Employees Founded
Men Women
ACME Inc 700 300 1947
XYZ Corp 1200 800 1973

你可以发现,这种方法真的很麻烦,所以如果可能的话,还是尽量用scope属性吧。

跨行和跨列

在以前用表格布局的年代,rowspan属性和colspan属性常被用来让单元格跨几列或跨几行,来布局那些经过整齐切割的图像。这两个属性现在还在用, 因为并没有CSS来控制单元格的跨行和跨列。仔细想想,其实是很有道理的:跨行和跨列示表格结构(structure)的一部分,而不是其表现(presentation)。

列和列组:<col>和<colgroup>

HTML提供了<colgroup><col>标签来为相关的表格列分组。这样就可以(在一些浏览器中)使用CSS来单独的为列样式化。列组也可以使用scope属性来标明其表头信息。

这就是我要说的关于列和列组的全部。更多信息参考“其他”部分。

行组: <thead>, <tfoot>, 和<tbody>

表格的行可以分组为表头组(<thead>), 表尾(或表注)组(<tfoot>), 然后是一个或多个表身(<tbody>) 。每一个行组必须包含一个或多个表格行。

如果一个表格包含<thead>,那么它必须出现在<tfoot>和<tbody>之前。而<tfoot>则必须出现在<tbody>之前。如果没有使用<thead>和<tfoot>,那么<tbody>标签也可以不加(也不是非得不加,随你喜欢了)。一个有行组的表格结构看起来如下:

  1. <table>
  2. <thead>
  3. <tr></tr>
  4. … 更多表头的行
  5. </thead>
  6. <tfoot>
  7. <tr></tr>
  8. … 更多表尾的行
  9. </tfoot>
  10. <tbody>
  11. <tr></tr>
  12. … 第一个<tbody>的行
  13. </tbody>
  14. <tbody>
  15. <tr></tr>
  16. … 第二个<tbody>的行
  17. </tbody>
  18. … 更多的<tbody>
  19. </table>

使用行组有以下几个原因:

  • 这样样式化表头、表尾和表身比较方便,而且独立,不必要给每个标签加样式或class。
  • 当打印比较长的表格的时候,一些浏览器(比如基于Mozilla的)会在每一页的开头重复表头和表尾的内容,这样阅读打印版本的表格就比较方便。
  • 区分开表头和表尾也可以使一些浏览器浏览表格的时候,只滚动表身。

仅为数据表格而写

本文所写的所有都是关于使用HTML表格来组织和表现数据。如果你还是想用表格来布局,那么上文所述的都没有意义而且用不到。没有summary属性、没有表头、没有<caption>、什么都没有,没有格式,陈旧的布局表格除了<table>,<tr>,<td>什么都可以不要。另外还要承担风险,即如何面对那些非可视的用户代理(UA)。

优势

看来要用HTML做一个有语义化的数据表格有很多工作。对于复杂的表格是这样的。有时候基本上是不可能手工写出来的。但是对于简单的表格,那么使用一个<th>加上scope属性就可以了,又快又简单。

非常明显,语义化的表格对于使用屏幕阅读器或其他辅助技术的浏览者非常有好处。让那些巨大而复杂的表格“听”起来很有意义是非常困难的,所以尽可能的使表格简单。

另外对于使用可视化浏览器的设计者和用户也是有好处的:一个语义化的表格有大量的接口可以利用CSS来样式化,好的样式可以让表格更加易用。

其他

除了本文,还有更多关于数据表格内容。比如这里就没有提到axis属性,并且对于<colgroup>和<col>的描述也不是很深。对于格式化和样式化还有border模型我也没有深究,还缺少一个真正复杂的表格的例子。

想了解更多信息,可以参考以下文章:

--
译后记:因为最近还有点儿忙,这篇文章一直翻译了好多天。从这篇文章中学到了很多东西,有的还是第一次见到。比如应用多个样式到一个标签上只需利用空格写出多个class名就可以了,比如:<table class=”css1 css2 css3”>就表示这个表格同时应用了css1,css2,css3三种样式。另外觉得原文中给代码的修饰比较好看,于是自己写了CSS控制了一下,看上去还差不多。如下:

/*--用来控制代码(ol.code)显示--*/
ol.code{
 margin: 1em 0;
 border: 1px solid #DDD;
 padding: 2px 2px 2px 3em;
 font-family: courier new;
 font-size: 12px;
}
ol.code li.tab1{
 padding-left: 4em;
}
ol.code li.tab2{
 padding-left: 8em;
}
ol.code li{
 background: #F8F8F8;
 margin: 2px;
}
ol.code li.changed{
font-weight: bold;
color:maroon;
}
/*--结束--*/

(出处:清风网络学院






上一篇:站在版权肩膀成长的百度和迅雷

下一篇:IE6/IE7和Firefox对Div处理的差异

网页Web标准化教程关于表格的应用 相关文章:
·photoshop修改照片成为美女教程
·全方位性爱教程大全
·关于三级片和A片的区分标准
·为什么iexplore.exe在打开网页时CPU使用会100%?
·DIV CSS网页布局实例:十步学会用CSS建站
·3GPP LTE标准化进展——物理层
·非主流ps教程实用的技巧大全
·Photoshop抠头发高级抠图教程
·流光破解ftp密码教程
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
网页Web标准化教程关于表格的应用 相关软件:
·孙鑫VC++从入门到精通开发详解视频教程FLASH版
·黑客视频教程 VMware虚拟机的安装和使用
·刘天礼 吉他视频教程
·计算机基础知识教程
·美工设计教程
·大师之路Photoshop教程V2.0
·招聘面试技巧 视频教程
·Dreamweaver 网页设计
·主板BIOS设置 视频教程
·黑客视频教程-灰鸽子远控使用教程

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot