考虑这个简单的HTML表格:
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<table style="border-collapse: collapse; table-layout: fixed; width: 280px;">
<tr>
<td style="padding: 5px; width: 50px; border: 0; word-wrap: break-word;">a</td>
<td style="padding: 5px; width: 100px; border: 0; word-wrap: break-word;">b</td>
<td style="padding: 5px; width: 100px; border: 0; word-wrap: break-word;">c</td>
</tr>
</table>
</body>
</html>
这在每个主要的浏览器中都可以正确呈现,除了Chrome浏览器,其中列宽度奇怪地变成了46px、102px和102px。
如果我将CSS宽度声明从表格元素中删除,则在Chrome中可以正确呈现。但是我需要它在那里,否则单词换行就无法正常工作。
有什么想法为什么这不起作用吗?我尝试了不同的文档类型,但这并没有改变任何内容,所以我认为这不是HTML5表格问题。
编辑:事实证明,如果您在table
元素上指定table-layout: fixed
和像素宽度,并且在每个列上指定像素宽度,则Chrome将假定您的列宽度包括填充。这违反了W3C盒模型,并违反了CSS2所需的行为。
如果您没有指定table-layout: fixed
,或者您没有在table
元素上指定像素宽度,则Chrome将正确地假定您指定的列宽度不包括填充。所有其他浏览器都假定您指定的列宽度不包括填充。
在上面的示例中,将宽度指定为60px、110px和110px可以解决Chrome中的问题,但会在其他所有浏览器中破坏它。46px、102px和102px的值来自Chrome平均分配列的比率为40:90:90,而不是50:100:100。