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; }
你可以在这里测试一下 。