Firefox 计算的边距自动返回 0

Posted

技术标签:

【中文标题】Firefox 计算的边距自动返回 0【英文标题】:Firefox computed margin auto returns 0 【发布时间】:2014-08-09 02:46:44 【问题描述】:

我有一个与 css 水平居中的 div:

.bar 
    height: 38px;
    width: 970px;
    margin-left: auto;
    margin-right: auto;

我需要另一个元素与 .bar 具有相同的右侧边距,因此我为此使用 jQuery sizes:

<div class="spec">I need to be aligned the same.</div>

JS:

$(".spec").css('margin-right', $('.bar').margin().right + 'px');

这有效,但在 Firefox 30.0 中无效,因为它返回 0 来计算 .bar 的边距。有什么建议 ? http://jsbin.com/difobu/1/edit.

$('.bar').css('margin-right') 在 FF 30.0 中也返回 0px。 如果您不投票,请提供解释。

【问题讨论】:

你试过$('.bar').css('margin-right')吗? 说真的,$('.bar').margin().right 可以在其他浏览器中使用?应该是$('.bar').css('margin-right') $('.bar').css('margin-right') 在 FF 中返回 0,但在 Chrome 中返回一个数字。 请显示相关的 html 标记。 .bar 是否嵌套在另一个元素中?其他浏览器返回什么值? 不要粗鲁,但是那个插件有什么意义呢?似乎它与.css() 具有相同的功能,但增加了函数调用的额外开销。我错过了什么吗? 【参考方案1】:

不幸的是,这归结为浏览器的差异。引用an answer to a similar problem:

为什么 Chrome 和 IE 返回不同的值:.css() 为浏览器计算样式函数提供了一个统一的网关,但它并没有统一浏览器实际计算样式的方式。浏览器以不同方式决定这种边缘情况的情况并不少见。

所以你有点搞砸了。您有几个选项可以使这一点保持一致。

您可以通过在计算样式之前隐藏元素来可靠地返回auto。这样的事情可能会奏效:

var $bar = $('.bar');
$bar.hide();
var barMarginRight = $('.bar').margin().right; // "auto"
// do whatever you need to do with this value
$bar.show();

您还可以使用 jQuery 的 $('.bar').offset(),它返回您可能可以使用的属性。

// This might not be exactly what you want, but...
$('.spec').css('margin-left', $('.bar').offset().left + 'px');

您也可以尝试使用 CSS 解决问题,但我们需要查看您的整个页面才能做出决定。

【讨论】:

以上是关于Firefox 计算的边距自动返回 0的主要内容,如果未能解决你的问题,请参考以下文章

绝对定位 div 的边距底部在 Chrome 中工作,但在 Safari 或 Firefox 中不可用

如何在 IE 中设置对象的边距?

如何根据可见性自动调整两个垂直按钮之间的边距?

为啥 CSS 中的边距/填充百分比总是根据宽度计算?

我的网站在 Firefox 中无法运行 - 文本超出边距

iOS,标题中自定义单元格的边距与行不同,自动布局?