Consider de following markup:
<div id="outerElement">
<div id="innerElement" style="border: 1px solid blue; background-color: #f0f3f5; margin-top: 100px">
TESTE
</div>
</div>
I want to get the actual final height of outerElement
using javascript. I noticed that if I remove the vertical margins from innerElement
I am able to get what I want but I cannot alter styles from within the outerElement
.
How do I do this?
Obs:
I already tried height, scrollheight and offsetHeight in all browsers. Chrome gives me the expected value (including inner element's margins) for scrollHeight
. All other browsers fail.
I'd use jQuery. Try using
And see if that does it.
I guess you should go throw all element properties and the make a sum only in this way you can know the exactly height... but in the case of the height is set it by for example clear:both property I dont think is posible to know the heigth of an Element.
A 3 sec thought could be something like:
var o document.getElementById('id').style;
But I guess you must include also the document.getElementById('id').height value if have it.... is thougth but can help..
best =)
ok also not pretty but this is how I do it (disclaimer: I stole this from somewhere once)
This is a tricky question as what do you discern as the "appropriate" height. The height of the content inside including borders, what about padding, or the actual margin use? In general browser act fairly consistent on most things, but quirksmode can clear up what you need. (As a hint, if you need the actual margin used, its gonna hurt).
try $("#myelementId").outerHeight( true )
WARNING WARNING
clientHeight
almost works but doesn't include margins :(Just thought I'd add that I've been trying this today, and while nahumsilva & plodder almost have it right (nahumsilva's version appears to be more cross-browser {plodder's doesn't appear to work in Chrome/WebKit, but I'm no expert on these things}), they've both missed that an element may have computed style elements that aren't defined by it's own style.
This was driving me nuts - I was wondering where my
<p>
elements were getting an extra 16px of margin height - until I realised it was coming from the computed style.So, long story short, an approach like nahumsilva / plodder worked for me, with the added proviso that you should get the element's computed style with
window.getComputedStyle( element, null )
, which returns aCSSStyleDeclaration
object (likeelement.style
).element.offsetHeight
/element.clientHeight
should give you the height without margins, so the whole thing looks like: