关于表格元素的自动布局
在 W3C CSS2.1 文档中,TABLE 元素在自动布局时的列的宽度计算规则是这样的:
其中在第三步,提到了当表格中出现跨越多列的单元格时,它所跨列宽的计算规则:相应的增加所跨列的最小宽度。
虽然如此,但是对增加的方式没有明确说明,只是说,如果可能,所跨列增加的宽度应大致相同。
因此,对于跨列后的列宽计算方式,在各浏览器也就产生了差异。
关于 表格元素的自动布局 的详细信息,请参考 W3C CSS2.1 规范 17.5.2.2 Automatic table layout 中的内容。
单元格的 colspan 属性在 IE 中可能影响 TABLE 元素的自动布局。
此问题严重时可能会导致页面布局混乱。
IE6 IE7 IE8 |
---|
请看以下测试用例。
分析以下代码:
<script type="text/javascript"> window.onload = function() { function $(id) { return
document.getElementById(id); } $("info").innerHTML = "red cell clientWidth : " + $("td1").clientWidth +
"<br/>blue cell clientWidth : " + $("td2").clientWidth + "<br/>gold cell clientWidth : " +
$("td3").clientWidth; } </script> <table id="T" style="color:white;"
cellpadding="0" cellspacing="0"> <tr> <td id="td1"
style="background-color:red;">td1</td> <td id="td2"
style="background-color:blue; width:100px;">td2</td> </tr> <tr> <td
id="td3" style=" background-color:gold; width:300px;" colspan="2">td3</td> </tr> </table> computed clientWidth:
<div id="info" style="border:1px dashed red;
width:300px;"></div>
根据 CSS2.1 规范中的描述可知,td1 的最终宽度应为 200px。
这段代码在不同的浏览器环境中的表现:
IE | Firefox Opera Safari Chrome |
---|---|
可见,在 IE 中,单元格的 td1 和 td2 宽度被重新分配。
将 td2 的宽度设置 (width:100px;) 去掉后:
IE Firefox Opera Safari Chrome |
---|
1. 设置 TABLE 的 'table-layout' 特性值为 fixed,使用固定布局的表格元素可避免此问题。
2. 单元格所跨过的列的宽度都设置成 auto。
操作系统版本: | Windows 7 Ultimate build 7600 |
---|---|
浏览器版本: |
IE6
IE7 IE8 Firefox 3.6.8 Chrome 6.0.472.14 dev Safari 5.0.1 Opera 10.60 |
测试页面: |
cell_width_colspan.html
cell_width_colspan_2.html |
本文更新时间: | 2010-08-05 |
cell width colspan table