假设我在响应式设计上有2个元素:
<div id="container">
<div class="first"></div>
<div class="second"></div>
</div>
两个风格都包含:
width: auto;
display: inline-block;
float: left;
因为我期望不同的屏幕尺寸来查看页面,所以,根据屏幕尺寸,有时它们将被渲染/显示在同一行上,有时它们不会!,第二个DIV将被移动到另一行。
所以,我想知道,如何判断它们是否与JavaScript在同一行?
谢谢
答案 0 :(得分:1)
您可以使用元素边界框并检查重叠:
var rect1 = $('.first')[0].getBoundingClientRect();
var rect2 = $('.second')[0].getBoundingClientRect();
var overlaps = rect1.top <= rect2.bottom && rect2.top <= rect1.bottom;
这将检查任何可能足以供您使用的重叠。我使用jQuery来获取元素,但你可以以相同的方式使用纯js,它会更加冗长。
答案 1 :(得分:0)
页面上没有线条概念。您可以检查窗口中任何元素的x和y位置,然后确定它是否符合&#34;在同一行&#34; 上的任何条件。
默认情况下,div是窗口的整个宽度,因此在此HTML中容器内的两个div:
<div id="container">
<div class="first"></div>
<div class="second"></div>
</div>
将是一个在另一个之上,除非有一些你没有透露的其他CSS控制布局以允许它们在同一行。如果它们确实width: auto
并且没有任何其他布局规则影响这一点,那么它们将是全宽度,因此布局流中first
将高于second
。他们永远不会在同一条线上#34;通过该短语的任何典型定义。
您可以在此处尝试:https://jsfiddle.net/jfriend00/y0k7hLr8/,将右侧窗格调整为您想要的任何宽度。在所有情况下,first
都将保留在second
。
另一方面,如果允许div
元素具有不同类型的布局(例如让它们为display: inline-block
并为它们定义宽度),那么布局引擎将适合尽可能多地在给定的行上:https://jsfiddle.net/jfriend00/229rs97p/
答案 2 :(得分:-1)
有些东西告诉我显示:flex可能会帮助你。请阅读https://css-tricks.com/snippets/css/a-guide-to-flexbox/了解详情。