,那么表格元素的默认
值是RULES=ALL,而如果_n=0_,那么相应地RULES=NONE。
CELLSPACING
该属性是用来保留对旧的浏览器的兼容性的。它指定了表格框架间、每一行或列中的第一个
或最后一个单元格和表格边框的距离,以及表格中其他单元格之间的距离。参见标准单位。
通过使用式样表可以对该属性有更好的控制。
CELLPADDING
该属性是用来保留对旧的浏览器的兼容性的。它指定了单元格边线和它内部的内容四周的距
离大小。参见标准单位。通过使用式样表可以对该属性有更好的控制。
如果表格或列设定了固定的宽度,CELLSPACING和CELLPADDING可能会比所指定的值
需要更多的空间。实践经验显示,如果和WIDTH的属性发生冲突的话,后者会具有更高的
优先级。虽然这并不是本方案所规定为必须的。
4.6 表格标题
CAPTION元素是可选的元素,它用来给表格提供一个标题,需要起始和结束标记成对使用。
ID, CLASS, LANG and DIR
参见前文中其他元素的该属性定义
ALIGN
该属性可以用来控制表格标题相对于表格的位置。当使用ALIGN属性的时候,该属性应该
是下列的几个值之一:TOP, BOTTOM, LEFT及RIGHT。我们推荐标题应该和表格的宽度
或高度保持一致。我们还特意不对标题的默认位置做出具体的规定。
请注意ALIGN属性在HTML中被过度地使用了,但是为了和现有的浏览器兼容,我们在这
里仍然使用了该属性。
4.7 COLGROUP元素
COLGROUP元素就像一个容器,来容纳一组列,并允许你能够给这些列设置默认的属性。
如果没有使用COLGROUP元素,表格中所有的列都被假定认为属于同一个列的组。每一
个COLGROUP元素能够容纳0个或更多的COL元素。COLGROUP需要一个起始的标记,
但是结束标记可以省略。这在定义一系列的COLGROUP元素的时候特别有用。例如
COLGROUP可以具有以下这些属性:
ID, CLASS, LANG和DIR
参见前文中其他元素的该属性定义。
SPAN
用一个正整数的值来表示在这个组里面默认的有多少列。如果COLGROUP元素中含有一
个或更多的COL元素的话,那么这个属性应该被忽略。该属性提供了一种方便的方法来组
织列,而不用指定COL元素。
WIDTH
为一个组中的列指定一个默认的宽度值,参见标准单位。另外,可以使用"*"来说明相对宽
度。例如
width=64 用屏幕像素表示的宽度
width=0.5* 0.5的相对宽度
相对宽度可以看作是各个不同列的之间的相对宽度的一个约束。如果一个COLGROUP元
素指定了一个值为0的相对宽度,那么这个组里面的所有列都会被按照它们最小的宽度进
行设定,除非它们被一个带WIDTH属性的COL元素另外做出规定。如果宽度是按照绝对
单位给出的,用户端可以用这个宽度来约束表格的宽度。"*"后缀用来简化导入那些使用
CALS表述方式的表格的工作。
ALIGN, CHAR, CHAROFF and VALIGN
指定表格单元格内部的水平和垂直对齐属性。请参看对齐属性的继承顺序。
4.8 COL元素
该可选的元素用来指定表格中列的默认设置。该元素是一个空元素,不含有内容,所以也不
会有结束标记。可以连续给出多个COL元素。COL的属性将会覆盖包含它们的COLGROUP
元素的本身属性。
ID, CLASS, LANG和DIR
参见前文中其他元素的该属性定义。
SPAN
用一个正整数的值来表示在这个元素影响的列的数目,默认为一个。如果不指定SPAN属
性的话,那么第一个COL元素将应用到第一个列,第二个元素应用到第二个列,以此类推。
如果第二个元素指定SPAN=2,那它将会应用到第二和第三个列。接下来的COL元素则应
用到第4个列,并这样继续下去。特别地,如果用SPAN=0,这意味着COL元素将应用到
从当前列直到最后列之间的所有列。需要注意的是一个COL SPAN并不定义一个组。它主
要是用来共享属性的定义。
WIDTH
定义列的宽度,参见标准单位。如果该元素跨越了若干个列,那么WIDTH属性指定的是每
个独立的列的宽度,而不是整个跨越的宽度。此外,可以使用"*"后缀来说明相对宽度。
例如
width=64 用屏幕像素表示的宽度
width=0.5* 0.5的相对宽度
相对宽度可以看作是各个不同列的之间的相对宽度的一个约束。如果一个COL元素指定了
一个值为0的相对宽度,那么该列会按照它最小的宽度进行设定。如果宽度是按照绝对单
位给出的,用户端可以用这个宽度来约束表格的宽度。当导入那些使用CALS表述方式的
表格时,使用"*"后缀来简化导入工作。
ALIGN, CHAR, CHAROFF和VALIGN
指定表格单元格内部的水平和垂直对齐属性。请参看对齐属性的继承顺序。
4.9 表格的表头,表体和脚注元素
表格可以分为表头和表体部分。THEAD和TFOOT元素是可选的,但是一个或更多的
TBODY元素却是必须的。如果一个表格只包含TBODY部分,那么TBODY的开始和结束
标记可以省略,因为处理程序可以猜到这些元素。如果有一个THEAD元素的话,那么必须
使用THEAD的起始标记,而如果后面紧跟着一个TFOOT或者是TBODY的起始标记的话,
THEAD的结束标记可以被省略。同样的,这也适用于TFOOT标记。
注意,这里的定义也为那些按照旧的模型建立的表格提供了兼容性,如果有THEAD的结束
标记,TFOOT和TBODY也可以被省略。
THEAD,TFOOT以及TBODY元素为表格的显示提供了一种更加方便的控制方法。如果表
格正文有很多行,用户端代理可能会使用一个可以滚动的区域来容纳表体正文。当表格输出
到一个使用分页机制的设备上时,表格必须在页边界的地方断开。THEAD,TFOOT以及
TBODY元素能够让用户端在每一页的末尾都显示表格的脚注,而在页的开头显示表格的标
题,中间则是连续显示表格的正文。
在标记的摆放顺序上,TFOOT标记在TBODY前面,这样浏览齐可以在接受到所有的表格
数据前就开始显示脚注。这在将那些十分长的表格显示在滚动区域时或者是将表格分割成很
多页,进行分页输出的时候特别有用。
每一个THEAD,TFOOT以及TBODY元素都必须包括一个或更多的TR元素。
ID, CLASS, LANG和DIR
参见前文中其他元素的该属性定义。
ALIGN, CHAR, CHAROFF和VALIGN
指定表格单元格的水平和垂直对齐属性,参见对齐属性的继承顺序。
4.10 表格的行(TR)元素
TR或者说表格的行元素可以看作是表格中一行单元格的容器。结束标记可以被省略。
ID, CLASS, LANG和DIR
参见前文中其他元素的该属性定义。
ALIGN, CHAR, CHAROFF和VALIGN
指定表格单元格的水平和垂直对齐属性,参见对齐属性的继承顺序。
4.11 表格单元格: TH以及TD
TH元素用来表示表头单元格,而TD元素用来表示表格的数据。这让用户端即使在没有式
样表的情况下,也可以清楚地区分表头和正文的单元格。
单元格可以跨越多行或多列,也可以为空。跨越多行的单元格也计入每一个跨越的行中的列
的总的数目,但只在标记中出现一次(在第一个跨越的行中)。行的数目是由TR元素的数
目所决定的。除此以外,任何由单元格跨行而产生的行将被忽略。
如果一个表格的列的数目比在某一行中的单元格的数目要多(因为包括了跨行的单元格),
缺少的单元格将显示在表格的右边,并作为空单元格看待。如果语言属性指定为从右到左的
显示顺序,那么缺少的单元格就显示在表格的左边。
我们还可以创建带有重叠单元格的表格,如下所示:
显示的效果如下:
/-----------\
| 1 | 2 | 3 |
| |-------|
| | 4 | |
|---|...|---|
| 5 : | 6 |
\-----------/
在这个例子里,标为4和5的单元格互相重叠了。在这种情况下,如何进行显示将由各用
户端独立处理。
单元格的AXIS和AXES属性使得我们可以为单元格定义简洁的标记。当将表格转化为语音
的时候,这些属性可以用来针对表头为每个相应的单元格提供简短的名字。另一种情况是,
当你将来想处理表格的内容,并将它们导入到数据库的时候。这些属性可以被用来定义为数
据库的字段名。表格的类属性可以让软件来辨认哪些表格可以这样处理。
ID, CLASS, LANG和DIR
参见前文中其他元素的该属性定义。
AXIS
该属性为表头单元格定义了一个简短的名字,例如可以在将此表格转化为语音的时候使用。
默认为表格的内容
AXES
该属性是一个用逗号分割的axis名字的列表,指明了适用于该单元格的行和列标题头的内
容。举例来说,当将表格转化为语音的时候,可以用该属性来确定单元格在表格中的位置。
如果没有该属性,用户端将试图察看其所在的列或同行的左边单元格(对某些语言来说是右
边的单元格)的设置来查找相应的表头单元格。
NOWRAP, 例如:
如果使用该属性,将迫使其所在的单元格里的文字不进行自动换行。如果随便使用的话,可
能会导致非常宽的单元格。该属性是为了保留对旧的浏览器的兼容性而设置的。如果使用式
样表的话可以有更好的控制(例如对文字溢出的处理控制)。
ROWSPAN, 例如: |
该属性用一个正整数来指明该单元格跨越了多少行。默认的ROWSPAN数目是1。特别地,
ROWSPAN=0将使得该单元格从现在所在行开始跨越到表格的最后一行。
COLSPAN, 例如: |
该属性用一个正整数来指明该单元格跨越了多少列。默认的COLSPAN数目是1。特别地,
COLSPAN=0将使得该单元格从现在所在列开始跨越到表格的最后一列。
ALIGN, CHAR, CHAROFF和VALIGN
指定表格单元格的水平和垂直对齐属性,参见对齐属性的继承顺序。
请注意:我们建议那些应用者对TH和TD的Netscape1.1宽度属性提供支持,虽然这并不
是本方案的内容。我们也建议文档的创建者用COL元素的宽度属性来进行替代。
5.推荐的布局算法
如果TABLE元素中的COLS属性指定了列的数目,那么表格就可以按照一个固定的布局进
行显示,否则,将要使用下面所描述的自动布局算法。
5.1 固定布局算法
对这种算法而言,它假定列的数目是已知的。列的宽度默认地被设置为同样地大小。创建者
可以通过使用COLGROUP或COL元素来指定相对或绝对的列宽以覆盖该数值。表格的默
认宽度是当前左右边界之间的距离,但是也可以被TABLE元素的WIDTH属性的值所改变,
或者由列的绝对宽度的数值所决定。如果列既包含了绝对宽度,也包含了相对宽度,那么第
一步是要将表格的宽度减去用绝对宽度定义的列的总宽,然后剩下的宽度再按照相对宽度定
义的列进行分配。
如果仅仅靠表格语法是不足以保持属性值的一致性的。例如COLS属性所指定的列的数目
可能和用COL元素所指定的列的数目不一致,这也就可能和表格单元格所表示的列的数目
不一致。当列过于狭窄以至于容纳不了单元格的内容的时候,就会发生更多的问题。TABLE
元素或者是COL元素所指定的表格的宽度都可能引起单元格内容的溢出。所以我们推荐用
户端在这些情况下,要尽量能够进行恢复。比如说用连字符来连接单词,或者在连接点未知
的情况下,试着分隔单词。
如果碰到了一个不可分割的元素,而且该元素将引起单元格内容的溢出的话,用户端可能需
要考虑调整列宽,并且重新显示表格。在最坏的情况下,如果调整列宽或者是让单元格的内
容变成可滚动的都不合适的话,可能需要考虑截去一部分的内容。在任何情况下,如果单元
格的内容被分割开或者是被截断了,都应该用一种适当的方法向用户指明这一点。
5.2 自动布局算法
如果在表格开始的标记里面缺少COLS属性,那么用户端就应该采用自动布局算法。它线
性地根据表格的大小,使用两种方法来处理表格的数据和范围。
在第一种情况下,自动折行被禁止,用户端保留对每个单元格最小和最大的宽度的记录。最
大的宽度由最宽的行所决定。因为禁止折行,所以段落都排在一个长的整行中,除非用
元素来折行。最小的宽度由最宽的单词或者是图片或者是类似的东西所决定,当然还要考虑
到行首的缩进以及列表符号等等。换句话说,如果你想要将单元格的内容在其自己的窗口位
置格式化输出的话,应该先确定你所使用的最小宽度不会导致单元格内容溢出。如果允许用
户端可以分隔单词将减少水平滚动的产生,或者避免更糟的情况—单元格内容的截断。
这个处理过程也适用于那些单元格内容中的任何嵌套表格。在嵌套表格中单元格的最小和最
大宽度被确定为这些表格的最小和最大宽度,同时也是容纳这些表格的单元格的宽度。这个
算法针对所有的单元格内容来说都是线性的,而且从更广义的角度来看,是和嵌套的深度无
关的。
为了应付单元格内字符的对齐,该算法还要考虑每个列中的三种情况:左对齐字符,右对齐
字符以及未指明对齐者。所以一个列的最小宽度是max(最小的左对齐的 + 最小的右对齐
的, 最小的未指明对齐的)
单元格的最小和最大宽度被用来确定列的相应的最小和最大宽度。而这些宽度又被用来确定
表格的最小和最大宽度。请注意单元格可以包含嵌套表格,但这并不会使得代码变得过分复
杂。接下来的一步就是根据所有的空间来为每个列分配空间(也就是在左右边界之间的空
间)。
对于那些跨越多列的单元格来说,一个简单的被Arena所使用的方法就是给每个所涉及的
列均匀地分配最小/最大宽度。一个稍微复杂一点的方法是利用那些没有跨越列的单元格的
最小/最大宽度来计算如何分配跨越的宽度。实践显示这两种方法的结合将能够满足大多数
表格的要求。
在分配列的宽度的时候,表格的边框以及内部单元格四周的边距也应该一并考虑进去。这有
三种情况:
1. 表格的最小宽度等于或者大于实际的空间宽度。在这种情况下,按照最小的宽度来分配
空间,并且让用户进行水平滚动。如果要转化为盲文的话,则有必要将这些单元格替换为包
含全部内容的参考符号,按常规放置在表格的前面。
2. 表格的最大宽度正好和实际的空间宽度吻合。在这种情况下,按照列的最大宽度分配空
间。
3. 表格的最大宽度大于实际的空间宽度,但是最小宽度小于这个宽度。在这种情况下,我
们把实际的宽度和最小的表格宽度的差值记作W,把表格的最大宽度和最小宽度的差值记
作D。对每个列来说,我们把该列的最大宽度和最小宽度的差值记作d。现在将列的宽度设
定为最小的宽度加上d?W/D。这就可以使那些最大宽度和最小宽度相差很大的列比那些相
差比较小的列要宽。
对于所有在第一种情况中如此得到最小和最大宽度的嵌套表格来说,这一步被重复地执行。
在这种情况下,父表格(也就是说包含嵌套表格的表格)的单元格的宽度扮演着上述步骤中
当前窗口的大小。这个处理过程对所有的嵌套表格都作递归处理。然后,最顶级的表格按照
所分配的宽度进行显示。嵌套的表格则作为父表格单元格中的内容依次进行显示。
如果表格的宽度已经由WIDTH属性进行了指定,那么用户端将尽量让列的宽度能和表格的
宽度相匹配。但是如果这个WIDTH属性将会导致列的实际宽度小于它们所需要的最小宽度
(也就是说最低限度)的话,表格将不会局限于该属性的值。
如果用COL元素指定了相对宽度,那么该算法将做出一些修改,将在最小的列宽度的基础
上作一些增加以便能满足相对宽度的限制。COL元素也应该仅仅是作为一个参考,这样列
就不会被设定为小于它们的最小宽度了。同样地,列也不应该被设定得过宽而使得表格被撑
开得远远大于窗口的宽度。如果某个COL元素指定了一个值为0的相对宽度,那么列就应
该总是按照其最小的宽度来设置。
6.HTML表格DTD
DTD也就是文档类型定义(document type definition)为HTML表格的语法提供了正式的
定义。
7.参考文章
Arena
W3C的HTML3浏览器, 参见http://www.w3.org/pub/WWW/Arena/.
Arena原本是用来作为HTML3前的HTML+方案的概念演示而创作的。该浏览器现
在正被重新改写以便能在为HTML3提供应用的同时,也支持式样表以及客户端的script编
程。
CALS
连续的获取以及生命周期的支持(Continuous Acquisition and Life-Cycle
Support),(以前被称为计算机辅助获取以及后备支持(Computer-aided Acquisition and
Logistics Support)),即CALS,是美国国防部为了武器装备系统上数据的高效存取,创
建,交换的策略而设计的,更多的详细信息可以在美国海军的CALS页面上获得:
http://navysgml.dt.navy.mil/cals.html
HTML 2.0 (RFC1866)
超文本标记语言方案2.0版,由T.Berners-Lee和D. Connolly于1995年11月提
出,详细信息可以在http://www.w3.org/pub/WWW/MarkUp/ 或者
ftp://ds.internic.net/rfc/rfc1866.txt查阅。
HTML 3.0
超文本标记语言方案3.0版。最初的草案在1995年3月发布。对其的精简完善工
作仍在进行中,新的表格草案也是其中的一部分,W3C在HTML方面的相关工作可以在
http://www.w3.org/pub/WWW/MarkUp/找到。
RFC 1766
"Tags for the Identification of Languages", 由H. Alvestrand,
UNINETT于1995年3月发布。该文档可在下述地址下载:
ftp://ds.internic.net/rfc/rfc1766.txt.
8.安全性考虑
在本备忘录中没有讨论安全性方面的问题。
9.作者地址
Dave Raggett W3C
EMail: dsr@w3.org
The World Wide Web Consortium: http://www.w3.org/
RFC 1942 HTML Tables HTML中的表格
RFC文档中文翻译计划 2
|