chrome vs FF/IE/Opera 计算表格单元格宽度? (表格布局:固定)

Posted

技术标签:

【中文标题】chrome vs FF/IE/Opera 计算表格单元格宽度? (表格布局:固定)【英文标题】:chrome vs FF/IE/Opera in calculating table cell width ? (table-layout:fixed) 【发布时间】:2011-04-06 01:03:00 【问题描述】:

我现在已经搜索了将近半天...但我找不到为什么 chrome6/7 似乎是与 IE8/FF3.6/Opera 相比唯一不添加填充的浏览器表格单元格的指定宽度。

当然,如果您使用的是 table-layout:fixed,这将变得至关重要, 因为突然之间他们必须注意指定的 px 宽度。

好的,最后我的问题: 有谁知道为什么 Chrome 的计算方式不同,哪个浏览器是正确的(符合标准),希望有一个优雅的解决方案吗?

目前,我唯一的解决方案是带有 chrome.css 的条件注释,我在其中手动将填充添加到宽度...颤抖...

(顺便说一句:任何想告诉 px 宽度不适合 web 开发的人......请随意离开此页面)

补充:关于回复) 首先感谢您的即时回复...我试图使其尽可能短,因此我将事实减少到最低限度...但是,正如您所提到的,网络开发中有很多变量所以我试图澄清......

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4 /strict.dtd">
<html>
<head>
    <style type="text/css">
        div  width:300px; 
        table  table-layout:fixed; width:100%; height:50px; 
        td.col1  width:20px; background-color:blue; 
        td.col2  width:40px; background-color:red; 
        td.col3  width:60px; background-color:yellow; 
        td.col3  width:auto; background-color:yellow;  

        td  padding:5px; 
    </style>
</head>
<body>
    <div>
        <table cellpadding="0" cellspacing="0">
            <tr>
                <td class="col1"></td>
                <td class="col2"></td>
                <td class="col3"></td>
                <td class="col4"></td>
            </tr>
        </table>
    </div>
</body>

现在如果你切换 css 行

td  padding:5px; 

在不同的浏览器中,您会看到 chrome 在宽度内包含填充,而其他浏览器添加它

希望这有助于澄清并提前感谢 伯尼

【问题讨论】:

您能否发布一个简短的示例来演示您遇到的问题? 您是否提供了有效的文档类型?例如以标准模式渲染。这在尝试控制渲染时会产生重大影响。 我在原帖中添加了几行,希望有助于澄清 刚刚注意到在您上面编辑的示例中,您的样式表中有两个 td.col3。如果这是您的问题,这将是前额扁平化,我只能假设这是帖子中的一个小错字,而不是您的实际代码。 【参考方案1】:

我已尝试重现您的问题,但以下在 Chrome 7 和 Firefox 3.6 中对我来说完全一样:

<!DOCTYPE html>
<style>
table  table-layout: fixed; border: 1px solid black; 
td  width: 5px; background: green; outline: 1px solid red; padding: 5px; 
</style>
<table>
<tr><td></td><td></td></tr>
</table>

为了解决您的问题,如果您还没有文档类型,我建议您先尝试添加一个文档类型。使用 doctype 将触发标准模式,这意味着浏览器之间的行为更有可能保持一致。我上面使用的&lt;!DOCTYPE html&gt; 是HTML5 doctype,但它实际上可以在pretty much all browsers 中触发标准模式。

如果标准模式不能帮助您获得更好的一致性,那么请尝试将您的问题简化为最小示例;剥离所有无关紧要的东西,直到你只剩下足够看到你的问题。我上面给出的例子说明了我的意思是多么的小。足够的标记和样式,以便能够轻松地查看表格并在浏览器之间进行比较。一旦你减少到一个最小的例子,你可能会自己看到问题,或者如果没有,你可以在 *** 之类的论坛上发布一些内容并获得更多有用的答案,因为人们不必猜测是什么你的问题是,或者浏览一整页的 HTML 和 CSS 只是为了找到你提到的一个小问题。

【讨论】:

【参考方案2】:

原因可能是两者之一:

    您设置了表格和单个单元格的宽度属性,单元格的总宽度与您分配给表格的值不一样;或 单元格的总宽度(以及表格的宽度)大于包含元素的宽度 (div)。如果是这种情况,Chrome 将重新分配单元格宽度,使其与您的 CSS 不同。

查看您的标记,我建议您首先将实际值设置为 td.col3 或删除“auto”,然后看看会发生什么。

【讨论】:

【参考方案3】:

我有同样的问题,很遗憾,我没有找到真正的解决方案,但我找到了另外两个线程,一个错误报告 + 一个解决方法。

线程:

    Table-layout:fixed rendering differences in Safari

    Webkit browsers not accounting for padding when determining cell width in table-layout:fixed

错误报告:

https://bugs.webkit.org/show_bug.cgi?id=13339

可能的解决方案:参见第二个线程。

【讨论】:

【参考方案4】:

对于表格布局:用 CSS 修复:

td  width: 150px; padding: 5px; 

下图显示了结果(左:Chrome;右:Firefox): [*** 不允许我发布图片.. 尚未]

铬:5-140-5 火狐:5-150-5

建议/解决方法: 尽量不要在 td 层上使用填充。使用 div/span 元素将您的内容包装在 td 中:

span.column_wrap

    padding: 0 3px;
    display: block;
    line-height: 26px;


<td><span class="column_wrap">content here</span></td>

【讨论】:

【参考方案5】:

在遇到此错误后,我注意到在 Chrome 中,如果将表格行的高度(例如表格的标题)添加到 40,然后将 5 填充添加到整个表格,表格行高现在变为 45。这在 Firefox 上不会发生。

所以,为了解决这个问题,我在 css 中设置了该行的高度并添加了 0 填充:

.title 
    height: 45px;
    padding: 0px; 

在包含表格标题的表格行上,然后向表格添加填充。 现在我可以有 45px 高度 + 10px 填充,标题行保持在 45px(而不是变成 55)。

【讨论】:

以上是关于chrome vs FF/IE/Opera 计算表格单元格宽度? (表格布局:固定)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 创建新的CSS选择器(FF,IE,Opera)

移动 Safari 视差滚动不起作用

仅从 html5 视频/音频加载元数据

jQuery“添加到书签”;

如何计算chrome中的indexedDB表大小?

证明与计算: 从加密哈希函数到一致性哈希