2012-11-17 14 views
26

要素の内側の高さを、どのようにして埋め尽くさないようにしますか?要素の内側の高さを取得する

んjQueryの、ただ純粋なJS、およびクロスブラウザのソリューション(IE7を含む)

enter image description here

+1

ソリューションは簡単ですか?そうすれば、これらのことを心配する必要はありません。次に、offsetHeightを使用すると、適切な高さがマージンなしで返されます。 – elclanrs

+0

これはCSSコントロールがないプラグインのための非常に具体的な質問です。私はちょうど私が得たものと一緒に作業しなければなりません – vsync

+0

だから...あなたはまだ 'box-sizing:border-box'あなたにいくつかの時間と頭痛を救うでしょう。 – elclanrs

答えて

30
var style = window.getComputedStyle(document.getElementById("Example"), null); 
style.getPropertyValue("height"); 

上記のバージョンが最新のブラウザで動作します。 IEブラウザの場合はcurrentStyleを確認してください。コメントから

+5

あなたが意味する: 'parseInt(style.getPropertyValue( 'height'));' – vsync

+4

css http://jsfiddle.net/Kxsvx/に高さがないのでInternet Explorerは "auto"を返します。それの高さ! – Mic

+0

@MicはどのInternet Explorerですか? – Fresheyeball

0

EDIT:

http://jsfiddle.net/hTGCE/1/(その後、予想もう少しコード)あなたはこのような機能を見つけるインターネットで

function getRectangle(obj) { 

      var r = { top: 0, left: 0, width: 0, height: 0 }; 

      if(!obj) 
      return r; 

      else if(typeof obj == "string") 
      obj = document.getElementById(obj); 


      if(typeof obj != "object") 
      return r; 

      if(typeof obj.offsetTop != "undefined") { 

      r.height = parseInt(obj.offsetHeight); 
      r.width = parseInt(obj.offsetWidth); 
      r.left = r.top = 0; 

      while(obj && obj.tagName != "BODY") { 

       r.top += parseInt(obj.offsetTop); 
       r.left += parseInt(obj.offsetLeft); 

       obj = obj.offsetParent; 
      } 
      } 
      return r; 
     } 

あなたはパディングを減算し​​たい場合は/ボーダー-widthはcssファイルに設定され、style属性では動的ではありません。

var elem = document.getElementById(id); 
    var borderWidth = 0; 

      try { 
      borderWidth = getComputedStyle(elem).getPropertyValue('border-top-width'); 

      } catch(e) { 

      borderWidth = elem.currentStyle.borderWidth; 
      } 
    borderWidth = parseInt(borderWidth.replace("px", ""), 10); 

と同じ詰め物が付いています。あなたはそれを計算します。

+1

インターネットでは、ごみのコードを見つけることができます。私は、この謎のための究極の答えではなく、肥大化した、遅いコード..しかし答えに感謝:) – vsync

+0

"getComputedStyle"とメソッドのCSS属性 "高さ"のない動的な高さがない場合作業。または私は間違っていますか? – Mic

+0

正常に動作しました。 – vsync

0

私は同じ問題を抱えていたし、ネイティブクロスplattformソリューションはありませんが分かったが、CSSで `ボーダー-box`を使用しないのはなぜかの

var actual_h = element.offsetHeight; 

      if(parseInt(element.style.paddingTop.replace('px','')) > 0){ 
       actual_h=actual_h - parseInt(element.style.paddingTop.replace('px','')); 

      } 
      if(parseInt(element.style.paddingBottom.replace('px','')) > 0){ 
       actual_h=actual_h - parseInt(element.style.paddingBottom.replace('px','')); 

      } 
+1

MDN [states](https://developer.mozilla。 "style'プロパティは要素のスタイルを一般的に学習するのに有用ではありません。なぜならそれは要素のインライン' set_style_information 'に設定されたCSS宣言だけを表すからです。 style'属性[...]」となります。 – Spooky

+0

ボックスサイズはIE7では機能しません – Chandrakant

関連する問題