如何計算一個元素與下一個渲染元素之間的空間量?如何計算兩個元素之間的空間?
我想知道特定的hr
和下面的任何節目之間有多少空間。從視覺上來說,這可能是一個段落或一個標題或一個圖像或其他任何東西,但hr
和下一個東西都可以嵌套在其他塊。所以,通過「渲染元素」,我的意思是頁面上下一個可見的東西。
我需要這個的原因是我需要在hr
,position: relative
之後插入一個元素,並且我不想移除內容,除非我的空間比我的新元素短。如果空間較短,我只想盡可能多地移動內容以避免覆蓋內容。
我根本無法控制HTML的生成。我只能將代碼添加到生成的頁面。
下面是我的工作HTML的例子:
<div class="extra-wrapper">
<p>The line that separates the header from the rest of the page is below this.</p>
<hr>
</div>
<p class="top-p">
Lorem ipsum dolor...
</p>
如果總是這樣,在片段下方可能會奏效,但問題是,我開始與兩個元素並且頁面上可見的下一個元素可能以不可預知的方式嵌套在其他塊中。
我還發現下一個元素可能是兄弟姐妹。所以我需要檢查$hr.next()
是否有值,我在下面的代碼片段中沒有這樣做。
$(function() {
var $header = $('#header');
var $hr = $header.siblings('.extra-wrapper').children('hr').filter(':first');
var $next_element = $hr.parent().next();
var extra_wrapper_bottom_margin = parseInt($hr.parent().css('margin-bottom'));
var extra_wrapper_bottom_padding = parseInt($hr.parent().css('padding-bottom'));
var hr_bottom_margin = parseInt($hr.css('margin-bottom'));
var hr_bottom_padding = parseInt($hr.css('padding-bottom'));
var next_element_top_margin = parseInt($next_element.css('margin-top'));
var next_element_top_padding = parseInt($next_element.css('padding-top'));
/* Account for collapsing vertical margins. */
var biggest_margin;
if (extra_wrapper_bottom_margin > hr_bottom_margin) {
biggest_margin = extra_wrapper_bottom_margin;
} else {
biggest_margin = hr_bottom_margin;
}
if (next_element_top_margin > biggest_margin) {
biggest_margin = next_element_top_margin;
}
var space_between = biggest_margin + hr_bottom_padding + extra_wrapper_bottom_padding + next_element_top_padding;
$('#space').val(space_between);
});
div.extra-wrapper {
padding: 0.5em 0;
margin-bottom: 1em;
}
div.extra_wrapper hr {
margin: 1em;
}
p.top-p {
margin: 1em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="header">
<p>This is the header content.</p>
</div>
<div class="extra-wrapper">
<hr>
</div>
<p class="top-p">
Lorem ipsum dolor...
</p>
<label>Space:
<input id="space" type="text">
</label>
謝謝。
正如你使用jQuery,您可以訪問'偏移(',它得到元素相對於文檔的當前座標。您真正需要做的就是偏移兩個元素,並減去 – adeneo
@adeneo這將讓我的兩個元素的頂部之間的空間。我需要第一個元素的底部和第二個元素的頂部之間的空間。但是,使用'offset()'可能會爲我節省一些工作。如果我可以精確測量元素的高度,也許我不需要擔心元素是嵌套的。我一直在玩弄這[筆](http://codepen.io/Ghodmode/pen/vLVpMR),它看起來並不像jQuery可以做到這一點,但我可以用'offsetHeight'得到它DOM元素屬性。 – Vince