【问题标题】:Why does 'overflow: auto' clear floats? And why are clear floats needed?为什么“溢出:自动”清除浮动?为什么需要清晰的花车?
【发布时间】:2014-04-03 11:20:57
【问题描述】:

当我创建(有史以来第一次!)两列时,我的问题出现了。

我的左列和右列有一个包装器,但包装器的高度没有扩展以适应左右列,每个列分别浮动到其一侧。

我在网上找到了一个解决方案,它在包装器中添加了样式(这是正确的词吗?)“溢出:自动”。经过一番研究,我发现了几篇解释溢出作用的文章,包括这个 stackoverflow 答案:Why "overflow: hidden" clears a float?

但是,我的研究中没有任何内容可以解释为什么包装器的高度不会自动扩展以适应嵌套的 div,即两列。

不是所有嵌套在 div 中的东西都包含在该 div 中吗?这不会为内部元素创建边界吗?

感谢您对这个菜鸟的任何帮助。谢谢!

【问题讨论】:

  • overflow: auto 作为一个整体在 CSS 命名法中被称为 declaration,但只要没有歧义,就可以将其称为“样式”。
  • 这里是大家的游乐场:jsfiddle.net/ADxx9
  • 这是一个也讨论它的页面(“旧”和“新”解决方案)-quirksmode.org/css/clearing.html。但是 Nico O 的小提琴很棒,下面 Boltclock 的回答也很棒。
  • 感谢命名法的解释!

标签: css overflow


【解决方案1】:

默认情况下包装器不拉伸以包含其浮动的原因是因为浮动是从包装器的normal flow 中取出的,因此包装器的行为就像它们从未存在过一样。如果包装器中没有其他内容,则意味着包装器没有任何高度。

注意overflow: auto 不会清除浮动——它只是通过为它们建立一个新的块格式化上下文来使元素包含它的浮动,这样它们就不会侵入其他元素父上下文中的元素。1 这就是迫使父级拉伸以包含它们的原因。只有在浮动 之后添加清除元素,才能清除浮动。父元素无法清除其浮动子元素。

建立新的BFC导致元素包含其浮动的原因详见hereoverflow: auto甚至会导致建立BFC的原因详见here


1好吧,也许“just”并不是最好的副词。

【讨论】:

  • 为什么浮点数会脱离包装器的正常流程?
  • @Atlas2k:这样做允许任何内联内容与其一起流动,即使它们不共享相同的包装器元素。有关示例,请参见 this diagram
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多