为什么一个没有浮动的div覆盖/重叠浮动的div? ("为什么"成为焦点)

时间:2016-03-25 02:46:09

标签: css css-float

我的问题涉及何时你有一个div浮动(浮动:左)和一个之后没有浮动的div。在那种情况下,为什么是否会解除未加载的div覆盖并重叠第一个div?它就像第一个一样,浮动的div从第二个未释放的div超过第一个div的流程(如绝对定位)中取出。

我知道第二个未开发的div中的文本不会这样做。它似乎意识到第一个div和它旁边的浮动。

我也知道修复是让第二个div也浮动到左边。

我的问题是关注为什么。为什么第二个没有浮动的div(除了可能在其中的任何文本)覆盖并重叠第一个浮动的div?

在另一个关于Stack Overflow的类似问题中,有人说" float从正常流中移除一个元素,这意味着相邻元素的位置就像浮子不存在一样......这不是&#39 ;如果元素具有内联显示的情况。"所以我的问题是为什么是从正常流中移除的浮动元素(内联元素除外)?我理解为什么内联元素会出现这种情况(例如,您希望将文本刷新到浮动的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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

  

它就像第一个,浮动的div被从流程中取出

确切地说,这就是原因。浮动元素是out-of-flow

  

如果一个元素是浮动的,那么它就被称为流出   定位,或是根元素。

鉴于floats

的行为,这是必要的
  

浮动是一个在当前行上向左或向右移动的框。

如果他们没有从正常流程中移除,他们会在转移之前继续占据初始位置的一些空间。

注意内联浮点数也不例外,因为没有这样的东西。如Relationships between 'display', 'position', and 'float'

中所述,浮动被阻塞

因此,浮点后的块重叠:

  

由于浮动不在流中,因此创建了未定位的块框   在浮动箱垂直流动之前和之后,好像浮子没有   存在。但是,旁边创建的当前和后续行框   必要时缩短浮子以为边缘盒腾出空间   浮动。

您可以通过建立新的块格式化上下文来阻止此行为:

  

表的边框,块级替换元素或   正常流程中的元素,用于建立新的block formatting context(例如,带有&#39;溢出的元素&#39;除了&#39;可见&#39;)   不得与同一块中任何浮点数的边距框重叠   将上下文格式化为元素本身。如有必要,   实现应该通过将它放在任何下面来清除所述元素   在浮子之前,但如果有浮子,可以将它放在这些浮子附近   足够的空间。

&#13;
&#13;
.box1 {
  border: solid 3px;
  width: 350px;
  float: left;
  height: 100px;
}
.box2 {
  background-color: lightblue;
  width: 400px;
  height: 150px;
  border: blue solid 3px;
  overflow: hidden; /* Establish BFC */
}
&#13;
<div>
  <div class="box1"></div>
  <div class="box2"></div>
</div>
&#13;
&#13;
&#13;