当前位置: 首页 > 面试题库 >

为什么会发生溢出:隐藏的对象具有增加高度以包含浮动元素的意外副作用?

瞿健
2023-03-14
问题内容

用以下HTML最好地解释了这个问题:

<div class="outer">
    <div class="inner-left"></div>
    <div class="inner-right"></div>
</div>

CSS:

.outer {
    width: 100px;
    border: solid 5px #000;
}
.inner-left {
    float: left;
    height: 200px;
    width: 50px;
    background: #f00;
}
.inner-right {
    float: right;
    height: 200px;
    width: 50px;
    background: #0f0;
}

基本上,我想知道为什么会overflow: hidden导致外部元素的高度增加,从而包含两个浮动元素?


问题答案:

简而言之,这是因为具有的框overflow(不是)visible(默认)会创建新的[块格式设置上下文。

如果框本身没有指定的高度,则将创建新块格式上下文的框定义为按高度拉伸以包含其浮点数,默认为auto(规范将这些框称为框 格式上下文根 ):

10.6.7块格式上下文根的“自动”高度

在某些情况下(例如,参见上面的10.6.4和10.6.6节),建立块格式化上下文的元素的高度计算如下:

[…]

此外,如果元素具有任何浮动后代,其后边缘的边缘低于元素的底部内容边缘,则高度会增加以包括这些边缘。仅考虑参与此块格式设置上下文的浮点数,例如,绝对定位后代内的浮点数或其他浮点数均不考虑在内。

最初的CSS2规范不是这种情况,而是作为对CSS2.1的更改而引入的,以响应一个不同的(且更为紧迫的)问题。提供了有关更改的说明。因此,虽然更改是非常有意的,但似乎很容易将其称为副作用。

另请注意,这与清除浮点数( 间隙 )不同。花车的间隙 只有 当您使用会发生clear财产和有前面的彩车将被清除:

  • 如果您clear: both的示例中有一个元素是外部元素的同级元素,则浮点数将被清除,但外部元素将不会拉伸。

  • 如果您具有与外部元素的最后一个子元素相似的元素(或伪元素)(使其成为 float 的后续同级元素),则外部元素将向下拉伸以包含该元素的底部边缘,并且高度为零的元素,实际上意味着浮标的最底边缘。这种技术称为“ clearfix”,因为该元素(或伪元素)没有其他目的,只能通过使其内部的间隙迫使外部元素包含浮标。



 类似资料:
  • 问题内容: 我想问一下高度和漂浮物是如何工作的。我有一个外部div和一个内部div,其中包含内容。它的高度可能取决于内部div 的内容,但似乎我的内部div会溢出其外部div。正确的做法是什么? 问题答案: float大多数初学者都误解了该属性。好吧,到底是做float什么的?最初,float引入了该属性,以使文字围绕图像浮动left或浮动right。这是 @Madara Uchicha 的另一种

  • 问题内容: 我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。 有很多肮脏的方法可以解决此问题(将div插入clear:both) 我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏: 这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用! 我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子

  • 问题内容: 我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。 有很多肮脏的方法可以解决此问题(将div插入clear:both) 我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏: 这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用! 我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子

  • 我想打开一个模态层,超越身体滚动。为了实现这一点,当层被显示时,我将主体溢出设置为隐藏,溢出在模态层上滚动。从视觉上看,一个滚动条替换了另一个。 在背景中,我有一个固定位置和100%宽的顶栏。当主体溢出设置为隐藏时,100%宽度div(顶栏)占据滚动条空间,其元素向右移动。 如何防止这些元素移动? 我试图计算(javascript)滚动条的宽度,当设置body overflow:hidden时,给

  • 问题内容: 问题很简单而且简短:为什么要清除浮动?我查看了w3标准文档,但没有任何暗示。 问题答案: 因为当您与其他任何东西一起使用时会建立一个新的块格式设置上下文(链接到w3.org规范)。

  • 问题内容: 作为一名Web开发人员,我经常在另一个(父)div中有两个浮动(子)div。实际上,我整天都这样做。 如果没有额外的css / html,这将无法工作,因为父级不会自动增长以适应浮动子级。有两种流行的克服方法: 1)添加到父级的CSS中。 2)添加第三个“清除”子级。 我知道关于此类事情还有其他一些类似的问题,但是我的问题是: 哪种方法更好,为什么?各自的优缺点是什么? 问题答案: 隐