2012-09-14 65 views
2

我正在使用Android WebView來顯示我的應用程序的HTML內容。我需要動態查找元素的全部高度(通常是div),包括填充,邊距和邊框。我正在使用JavaScript,並且不能使用jQuery。外部元素邊距不等於內部元素邊距

我一直在使用我的div上的scrollHeight來獲得高度。我使用var style = window.getComputedStyle(DIV, null);得到了div的計算樣式,並通過調用style.marginTopstyle.marginBottom獲得了頂部和底部邊距。他們都是0px。問題是scrollHeight仍然沒有考慮屬於div的邊距的高度。

我得到了我的div的子元素(通常是P或H *標籤),並以相同的方式獲得相同的字段:scrollHeight,marginTopmarginBottomscrollHeight是完全相同的(因爲我通常每個div只有一個孩子),但通常在子元素中有一個頂部或底部的邊距值,這並不反映在父元素中。

我真的不明白爲什麼會這樣。通過小孩的保證金顯示在父母之外,但父母不知道,並且不能直接訪問它。

我正在尋找一種方法來訪問孩子通過父元素定義的邊距。那可能嗎?

This Question是非常有幫助的,但我沒有找到爲什麼它以這種方式呈現並且該線程似乎已經變冷的根本原因。

謝謝!

+1

它被稱爲「崩潰邊緣」。 http://www.w3.org/TR/css3-box/#collapsing-margins如果內部元素具有垂直邊距,並且外部元素沒有垂直填充/邊界,則內部和外部的垂直邊距元素合爲一體。可以這麼說,內緣泄漏到外面。 –

+0

那篇文章很有幫助!謝謝!這是否意味着我仍然需要單獨計算利潤率,即使它們合併爲一個? – Jon

回答

1

Sime Vidas指出我正確的方向,所以謝謝!

我發現自己試圖找出divs和他們的孩子之間崩潰邊緣的確切高度(但在我的問題上措辭大不相同)。通過DOM訪問該信息時,它會告訴我父母和孩子的風格屬性,但不會報告任何摺疊邊距的高度。

所以...我的問題的真正答案是NO。我一直無法找到直接訪問摺疊邊距屬性的方法。

什麼是同樣的好處是我的div的offsetTop屬性,並找到下一個div的offsetTop屬性之間的差異。這給出了總高度,包括邊緣的最終渲染。要僅查找邊距,請減去scrollHeight

這可能不適用於所有場景,但對我的目的來說已經足夠了。