2012-11-19 8 views
10

上下の値と左右の値をいくつかの要素に設定しています。私は、Firefox(16.0.2)で、この値にアクセスしようとしているとき、私はtop(代わりにautoの特定の値)のために間違った値を取得jQuery.css():Firefoxは '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/(クローム/ Safariでうまく動作します)

これを防ぐ方法はありますか?私がしたい

+0

何を取得しますか? – Kyle

+2

Firefoxで元の値を取得する唯一の方法は、要素のインラインCSSを使用することです。それ以外の場合は、計算された値が返されます。 – Adam

+0

@スレーン、私の答えを見て –

答えて

4

これはブラウザに依存し、スタイルをどのように解釈するのかは多少なりとも分かりません。しかし、特定のCSSとjQueryの回避策では、回避することができます。たとえば、アイテムを絶対に配置する必要がない場合は、これを削除するか、position:static;に変更してください。

このquestionをご覧ください。 ChromeとIEが異なる値を返す理由として

:の.css()ブラウザの計算されたスタイルの関数に 統一されたゲートウェイを提供していますが、それは は、ブラウザが実際にスタイルを計算する方法を統一しません。ブラウザでこのようなエッジケースを別々に決定するのは珍しいことではありません。 です。

+0

要素が隠されている間にcssプロパティを読み込むと、この問題は解決できます。この方法では、ブラウザは計算値を返しません。私の答えを見てください。ありがとう! –

0

ちょうどpositionスタイルを削除すると、計算された値の代わりにautoが得られます。

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

hereをテストできます。

+3

たぶん、彼は 'div'を配置する必要があります! –

6
あなたはコードの下で「自動」を設定するときは、トップの整数値を取得でき

$(function(){ 
    var top = $('div').offset().top; 
    alert(top); 
});​ 
  • オフセット戻り位置値を使用すると、自動
  • に設定し
+1

ありがとう!これでうまくいく! :) – gpopoteur

8

私も持っていましたこの厄介な問題。

一部のブラウザは、その時点で要素が表示されている場合、計算された位置を返します。そのトリックは、それを隠すこと、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が返されると予想される場合にのみ使用してください。

+0

私はこの方法でtry/finallyの使用が嫌いですが、実際の背景情報は私に問題の解決に役立ちました – Chris

+0

ありがとう、私はこれを知らなかった。私の車には見えないドアがあり、見えなくなるとドアがジャガイモのように見えます。 – kappaallday

関連する問題