【发布时间】:2011-07-14 05:40:44
【问题描述】:
考虑一下这个简单的 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-layout: fixed 和在table元素上的像素宽度和上的像素宽度每一列,那么 Chrome 将假定您的列宽 包括 填充。这违反了 W3C 盒子模型,也违反了 CSS2 要求的行为。
如果您未指定 table-layout: fixed 或未在 table 元素上指定像素宽度,则 Chrome 将正确假定您指定的列宽 exclude 填充。所有其他浏览器都假定您的列宽排除填充。
在上面的示例中,将宽度指定为 60px、110px 和 110px 可以解决 Chrome 中的问题,但在其他所有浏览器中都会出现问题。 46px、102px 和 102px 的值来自 Chrome 以 40:90:90 而不是 50:100:100 的比例均匀分布列。
【问题讨论】:
-
正所谓,内联样式是魔鬼。它们破坏了 CSS 的全部目的。
-
@cHao 内联样式或声明 CSS 类对于像这样的简单示例没有任何区别。
标签: html css google-chrome html-table