2012-11-17 16 views
26

Wie erhalten Sie die innere Höhe eines Elements, ohne Polster und Ränder?Die innere Höhe eines Elements erhalten

Keine jQuery, nur reine JS und eine Cross-Browser-Lösung (IE7 enthalten)

enter image description here

+1

Warum 'border-box' in CSS nicht? Auf diese Weise müssen Sie sich nicht um diese Dinge kümmern ... Dann können Sie 'offsetHeight' verwenden, das die richtige Höhe ohne den Rand zurückgibt. – elclanrs

+0

Dies ist eine sehr spezifische Frage für ein Plugin, das ich habe, das keine CSS-Kontrolle hat, ich muss nur mit dem arbeiten, was ich bekam – vsync

+0

Also ... Ich denke, Sie können immer noch die 'Box-Sizing: Border-Box' Ich werde dir Zeit und Kopfschmerzen ersparen. – elclanrs

Antwort

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

Die obige Version in modernen Browsern funktionieren. Bitte überprüfen Sie currentStyle für IE-Browser.

+5

Sie meinen: 'parseInt (style.getPropertyValue ('Höhe'));' – vsync

+4

Internet Explorer wird "automatisch" zurückgeben, wenn es in der CSS keine Höhe gibt http://jsfiddle.net/Kxsvx/, die Sie nicht haben die Höhe davon! – Mic

+0

@Mic welcher Internet Explorer? – Fresheyeball

0

EDIT Kommentare:

http://jsfiddle.net/hTGCE/1/ (ein bisschen mehr Code als erwartet)

im Internet können Sie Funktionen wie diese finden:

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; 
     } 

, wenn Sie die Polsterung subtrahieren wollen/Grenze -width wird in der css-Datei und nicht dynamisch in dem style-Attribut festgelegt:

und mit der Polsterung gleich. dann berechnen Sie es.

+1

im Internet finden Sie alle Arten von Müll-Code. Ich möchte die ultimative Antwort für dieses Geheimnis, nicht ein aufgeblähter, langsamer Code..aber danke für die Antwort :) – vsync

+0

Wenn Sie eine dynamische Höhe ohne ein css-Attribut "Höhe" für ein Element die Methode mit "GetComputedStyle" nicht haben Arbeit. Oder ich liege falsch? – Mic

+0

es funktioniert, habe es gerade versucht – vsync

0

hatte ich das gleiche Problem und fand heraus, da keine native Querplattform-Lösung ist aber die Lösung ist einfach, obwohl

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

Seien Sie darauf hingewiesen, wie MDN [Staaten] (https: //developer.mozilla. org/de-DE/docs/Web/API/HTMLElement/style # Getting_style_information), "Die' style' -Eigenschaft ist nicht nützlich, um den Stil des Elements im Allgemeinen kennenzulernen, da es nur die CSS-Deklarationen im Inline-Element des Elements darstellt Stilattribut [...] ". – Spooky

+0

Box-Sizing funktioniert nicht in IE7 – Chandrakant

Verwandte Themen