提问人:pgoetz 提问时间:4/2/2015 更新时间:4/3/2015 访问量:1105
<colgroup> 的 width 属性实际上指定了什么?
What does the width attribute of <colgroup> actually specify?
问:
我有点不清楚 x/html <colgroup> 标签中 width 属性的预期用途是什么。
这个引用(诚然是现在被放弃的 xhtml 2.0 规范)给出了一个示例,它清楚地表明了 colgroup 的宽度表示整个列组的总宽度:
http://www.w3.org/TR/2004/WD-xhtml2-20040722/mod-tables.html
(在此得到证实:http://reference.sitepoint.com/html/colgroup )
另一方面,大多数其他引用对含义不明确,或者建议 <colgroup> width 属性只是另一个共享属性,用于设置每个单独列的宽度:
http://www.w3.org/TR/html401/struct/tables.html
(在此得到证实:http://xhtml.com/en/xhtml/reference/colgroup/ )
HTML5 规范对 width 属性没有任何规定:
http://www.w3.org/TR/html5/tabular-data.html#the-colgroup-element
<colgroup> 中 width 属性的拟议用法是否随时间而变化?唯一有意义的定义是为 xhtml 2.0 规范给出的定义,否则使用它大多是多余的。在我看来,使用<colgroup>和<col>考虑得很差——太多的冗余,这让用户感到困惑。例如
<colgroup span=2 align="center"/>
和
<col span=2 align="center"/>
做完全一样的事情。能够为一组可以单独覆盖的列集中设置属性的微小便利性远远超过了对所有这些进行排序的额外处理复杂性。此外,如果 <colgroup> 中的宽度不适用于引用的列组的总宽度,那么我建议 <colgroup> 标签是完全多余的,除了节省一点键入之外,没有必要。事实上,我已经研究了一段时间,但仍然不知道如何正确使用这个属性,这表明典型的 html 用户不会打扰这个功能,最多会使用一组 <col> 标签来设置列属性。
答:
由于这个问题没有明确的答案,我决定尝试一个经验解决方案;即当前版本的 firefox(版本 37)和 chrome(版本 41.0.2272.118 m)如何处理 <colgroup> 和 <col> width 属性?使用带有此标头的 xhtml 测试文件:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
以下是从我的实验中得出的结论:
- <colgroup> width 属性适用于每个 <col> 子级,并不表示列组的宽度。
- 如果在子 <col> 元素中设置了宽度,则会覆盖父元素 <colgroup> 中的宽度设置。
- <col> width 属性是指相对于整个表的宽度,而不仅仅是 <colgroup> 父表的宽度。
这些项目符号中的第一个项目表明,<colgroup> 宽度的想法只是 xhtml2 委员会提出的,当该标准没有被采用时,这个想法就消失了。后两个项目符号项紧随第一个项目符号项,因为宽度只是另一个级联属性,在放置在 <colgroup> 标记中没有特别的额外含义。
Looking to the future, the HTML5 specification no longer comes with a DTD (the committee decided that a DTD wasn't expressive enough; for example, there's no way to represent the idea of "any attribute beginning with data-" in a DTD. The MS Visual Studio group did create an HTML5 Schema, which can be found here.
Looking at the HTML5 Spec, the <colgroup>/< ambiguities I referred to in my question have been cleared up: <col> can no longer be used as a standalone <table> element, but can only appear as a child of <colgroup>.
Looking at both the Spec and the Visual Studio schema referenced earlier, it's not clear how column width is handled at all, since this attribute doesn't appear in either the <colgroup> or <col> tags, as far as I can tell. Presumably this is to be handled strictly through the use of the style attribute.
评论