如何计算一个元素与下一个渲染元素之间的空间量?如何计算两个元素之间的空间?
我想知道特定的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