我有点不清楚x/html<colgroup>标签为.
这个引用(诚然是对现在已经废弃的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规范对宽度属性只字未提:
http://www.w3.org/TR/html5/tabular-data.html#the-colgroup元素
在<colgroup>随时间变化?唯一有意义的定义是为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.118m)如何处理<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>child,并且不表示列组的宽度
- 如果在子<col>元素中的宽度设置,这将覆盖父<colgroup>
- <col>width属性指的是相对于整个表的宽度,而不仅仅是<colgroup>parent
这些项目符号中的第一项表明;colgroup>width正是xhtml2委员会提出的,当该标准未被采用时,这个想法就夭折了。后两个项目符号紧跟在第一个项目符号之后,因为宽度只是另一个级联属性,当放置在<colgroup>标签。
展望未来,HTML5规范不再附带DTD(委员会认为DTD不够有表现力;例如,没有办法在DTD中表示"任何以数据开头的属性"。微软Visual Studio小组确实创建了一个HTML5模式,可以在这里找到。
从HTML5规范来看,<colgroup>/<我在问题中提到的歧义已经澄清:<col>不能再用作独立<table>元素,但只能作为<colgroup>。
查看前面引用的Spec和Visual Studio架构,根本不清楚如何处理列宽,因为该属性没有出现在<colgroup>或<col>标签,据我所知。据推测,这将通过使用样式属性来严格处理。