html - 为什么这个 HTML 表格在 Chrome 中不能正常工作?

标签 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>

这在每个主流浏览器中都能正确呈现,但在 Chrome 中除外,其中列宽奇怪地分别显示为 46px、102px 和 102px。

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

知道为什么这不起作用吗?我尝试了不同的文档类型,这并没有改变任何东西,所以我假设这不是 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。

最佳答案

我今天自己解决了这个问题,使用 table-layout: fixedbox-sizing: border-box 强制 Chrome 停止考虑填充。否则,您永远不知道 Chrome 会选择哪种大小模型,即使对于两个非常相似的表格也是如此。

关于html - 为什么这个 HTML 表格在 Chrome 中不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5285811/

相关文章:

javascript - 将 Bootstrap 4 Carousel 与动画文本同步(morphext)

JavaScript/JQuery 音频播放器 "Next"

html - 我如何居中一个 div 类?

html - 使用 MSO 条件 &lt;!--[if !mso]> 时 Outlook.com 中的空 HTML 电子邮件

html - 使用 Bootstrap 对齐跨度

纵向/横向上的 jQuery 消防功能

html - 使文本出现在图标旁边

google-chrome - 没有链接的 Typescript blob 文件名

javascript - `>=` 条件在 Chrome 中不起作用

html - 刷新后 Chrome 显示布局不正确,为什么?