为什么这个HTML表格在Chrome中无法正常运行?

mel*_*amo 15 html css google-chrome html-table

考虑这个简单的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>
Run Code Online (Sandbox Code Playgroud)

这在每个主要浏览器中都能正常呈现,除了Chrome之外,其中列宽分别为46px,102px和102px.

如果我从表元素中取出CSS宽度声明,那么它在Chrome中正确呈现.但我需要这个,否则自动换行将无法正常工作.

知道为什么这不起作用吗?我尝试了不同的doctypes,这没有改变任何东西,所以我假设它不是HTML5表问题.

编辑:事实证明,如果你指定table-layout: fixed 在像素宽度table元素,并在每一列像素宽度,那么Chrome会认为你列的宽度包括填充.这违反了W3C盒子模型,违反了CSS2要求的行为.

如果您未指定table-layout: fixed或未在table元素上指定像素宽度,则Chrome将正确地假设您指定的列宽不包括填充.所有其他浏览器都假设您的列宽不包括填充.

在上面的示例中,将宽度指定为60px,110px和110px可以解决Chrome中的问题,但然后在其他所有浏览器中将其分解.46px,102px和102px的值来自Chrome,均匀分布列,比例为40:90:90而不是50:100:100.

Chr*_*lsh 6

我今天自己解决了这个问题,table-layout: fixedbox-sizing: border-box强迫Chrome停止考虑填充.否则你永远不会知道Chrome会选择哪种尺寸模型,即使对于两个非常相似的桌子也是如此.


Tie*_* T. 1

好吧,我的数学表明 Chrome 正在做它应该做的事情:

102 + 102 + 46 = 250px ->宽度

2(5) + 2(5) +2(5) = 10 + 10 + 10 = 30px ->填充

宽度 + 填充 = 250 + 30 = 280px,或您为表格指定的宽度。