【发布时间】:2016-03-25 02:46:09
【问题描述】:
我的问题与当您有一个 div 浮动 (float:left) 和一个未浮动的 div 之后有关。在那种情况下,为什么未浮动的 div 会覆盖并重叠第一个 div?就像第一个浮动 div 被从流中取出(如绝对定位),第二个非浮动 div 如何越过第一个 div。
我知道第二个非浮动 div 中的文本不会这样做。它似乎知道第一个 div 并漂浮在它旁边。
我也知道解决方法是让第二个 div 也向左浮动。
我的问题是为什么。为什么第二个未浮动的 div(可能包含在其中的任何文本除外)覆盖并重叠了第一个浮动的 div?
在 Stack Overflow 上的另一个类似问题中,有人说“float 从正常流程中删除了一个元素,这意味着相邻元素的定位就像浮动不存在一样......如果一个元素不是这种情况有一个内嵌显示。”所以我的问题是 为什么 是从正常流程中删除的浮动元素(内联元素除外)?我理解为什么内联元素会出现这种情况(例如,您希望将文本刷新到浮动 div 以围绕图像自动换行)。但为什么它完全从正常流程中删除???
这里有一些代码来说明我的意思。
.box1 {
border: solid 3px;
width: 350px;
float: left;
height: 100px;
}
.box2 {
background-color: lightblue;
width: 400px;
height: 150px;
border: blue solid 3px;
}
<div>
<div class="box1"></div>
<div class="box2"></div>
</div>
【问题讨论】:
-
是什么让你认为第二个 div 覆盖了浮动 div?你给浮动的 div 设置了背景色吗?
-
为什么?因为这就是定义浮动行为的方式。如果不将其从正常流程中移除,则无法实现其目的,即将自身定位在其容器的左侧或右侧。其他元素(如果有的话)会阻碍。