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

为什么隐藏的溢出会阻止浮动元素逃离其容器?

颜志业
2023-03-14
问题内容

我在网页上遇到的一个常见问题是浮动div爬到了其容器之外。

#wrapper{
    border:1px solid red;
}

#wrapper div{
    float:left;
    font-size: 3em;
}
...
<div id="wrapper">
    <div>Hello World</div>
</div>

有很多肮脏的方法可以解决此问题(将div插入clear:both)

我看到的一个更整洁的解决方案是将wrapper divs溢出样式设置为隐藏:

这在所有浏览器上都能很好地工作,并且干净利落,没有任何额外的标记。我很高兴,但我不知道为什么会起作用!

我看过的所有文档都表明溢出:隐藏是为了隐藏内容,而不是调整父级的大小以适合其子级…

有人可以对此行为提供解释吗?

谢谢


问题答案:

它创建一个块格式化上下文。

块格式化上下文对于浮动的定位(请参见float)和清除(请参见clear)很重要。浮点数的定位和清除规则仅适用于同一块格式上下文中的内容。浮点数不会影响其他块格式上下文中的事物布局,而clear只会清除同一块格式化上下文中的过去的浮点数。



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

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

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

  • 问题内容: 用以下HTML最好地解释了这个问题: CSS: 基本上,我想知道为什么会导致外部元素的高度增加,从而包含两个浮动元素? 问题答案: 简而言之,这是因为具有的框(不是)(默认)会创建新的[块格式设置上下文。 如果框本身没有指定的高度,则将创建新块格式上下文的框定义为按高度拉伸以包含其浮点数,默认为(规范将这些框称为框 格式上下文根 ): 10.6.7块格式上下文根的“自动”高度 在某些情

  • 我正在尝试从以下网站使用Selenium与Java(3.3.0和Java版本“1.8.0_66”)点击一个日历。 https://www.cathaypacific.com/cx/en_us.html 要点击的目标-飞行-单向-“离开”按钮不管我尝试了什么可能的选项-by.id、by.xpath和Actions、EventFiringMouse等等,这个按钮根本不会被点击。 null null }

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