jQuery.css():Firefox不返回’auto’值

我将顶部或底部和左或右值设置为几个元素。 当我尝试使用Firefox(16.0.2)访问此值时,我得到一个错误的top值(特定值而不是auto

CSS

 div { bottom:200px; left:0px; top:auto; right:auto; } 

JS

 $(function(){ var top = $('div').css('top'); alert(top); });​ 

你可以在这里试试: http : //jsfiddle.net/UEyxD/2/ (适用于Chrome / Safari)

任何想法如何防止这种情况? 我想得到

这取决于浏览器以及它如何解释样式,它有点超出您的控制范围。 但是,使用特定的CSS和jQuery解决方法,您应该能够绕过它。 例如,如果您不需要绝对定位项目,则可以将其删除,或将其更改为position:static;

看看这个问题 。

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

我也有这个恼人的问题。

如果元素此刻可见,则某些浏览器返回计算的位置。 诀窍是隐藏它,读取css然后再次使其可见(如果尚未隐藏)。

我编写了一个方便的函数来处理这个并在Firefox中返回auto

的jsfiddle

 var getCss = function($elem, prop) { var wasVisible = $elem.css('display') !== 'none'; try { return $elem.hide().css(prop); } finally { if (wasVisible) $elem.show(); } }; alert( getCss($('div'), 'top') ); 

finally只是在函数返回之前将可见性带回元素。

您应该仅在您希望返回auto情况下使用此function。

使用以下代码设置’auto’时,您可以获得top的整数值:

 $(function(){ var top = $('div').offset().top; alert(top); });​ 
  • 设置为自动时的偏移返回位置值

只需删除position样式,您将获得auto而不是计算值。

 div { top: auto; bottom:20px; right:20px; left:0px; } 

你可以在这里测试一下 。