CSS“overflow:hidden”如何强制一个元素(包含浮动元素)环绕浮动元素?

任何人都知道为什么溢出:隐藏强制一个元素与浮动元素来包装元素?

我真的很想了解内部工作,而不是仅仅使用它,并相信“这只是有效的”。

我可以理解它是如何工作的,当包含的元素是浮动在相同的方向作为浮动的子元素,但溢出:隐藏意味着裁剪溢出的内容(当与位置:绝对/相对使用时)。

任何信息赞赏。

浮动,绝对定位的元素,内联块,表格单元格,表格标题以及“可见”以外的“溢出”的元素(除非该值已传播到视口中),则会build立新的块格式上下文。

在块格式化上下文中,每个框的左外边缘都与包含块的左边缘接触(用于从右到左格式化,右边缘接触)。 即使在有浮动的情况下也是如此(虽然箱子的线框可能由于浮动而缩小),除非箱子build立一个新的块格式上下文(在这种情况下箱子本身可能由于浮动而变窄)。

块格式化上下文清除浮游物。 资料来源: http : //www.w3.org/TR/CSS2/visuren.html#block-formatting

来自Visual格式模型的第9.2部分 CSS2规范的“Floats”的完整说明:

表格,块级replace元素或正常stream程中用于build立新的块格式化上下文的元素(例如“可见”以外的“溢出”元素)的边框不得与与元素本身相同的块格式化上下文。 如果有必要的话,实施应该通过将其放置在任何前面的浮体之下来清除所述元素,但是如果有足够的空间,可以将其放置在这样的浮体附近。 他们甚至可能使该元素的边框比第10.3.3节定义的窄。 CSS2并没有定义何时UA可以将所述元素放置在浮子的旁边,或者所述元素可能变得更窄。

好吧,似乎没有什么“实际的”解释为什么发生这种情况(不是我可以理解的任何一个 – 例如在其中一个响应中提供的CSS规范摘录只是解释了浮动内容框不应该展开以包装浮动元素 – 这是好的,这是合乎逻辑的,我完全得到)

我希望这不是一些随意的破解,强制父元素包装它的浮动子元素,但似乎每一个资源,我只是说,使用它,而不是为什么它的工作原理。

必须是一个黑客。

我遇到的最有用的资源(或者是最详细的资源 – 尽pipe没有我需要的细节)来自Quirksmode: http ://www.quirksmode.org/css/clearing.html

谢谢,如果其他人可以阐明这是一个随机的浏览器渲染怪癖,或有一个合理的解释,以这样的方式工作。

M.