正如另一个答案中提到的那样,不利的hidden
一面是它会令人惊讶地隐藏诸如下拉菜单之类的东西。但是,还有另一种方法是通过浮动父容器来包含一行。这通常适用于overflow: hidden
有缺点的地方,并且浮动也有助于解决许多遗留的 IE 问题,尤其是在列表中。如果您可以使用宽度,那么我将使用“浮动中的浮动”,或者display: inline-block
.
我并不是说“clearfix”没有用——但对我来说,它在 CMS 主题(如 Wordpress 和 Drupal)中根深蒂固,我认为在很多情况下它使用得太多,而且在实际上不需要的 div 上被清除或遏制。
我实际上无法想到我不能在 clearfix 上使用溢出或浮动的情况,但我的大脑处于假日模式 - 但因为它,clearfix,是一种复制/粘贴解决方案,有时是最容易推荐的东西,但是它必须是为 IE 设置 hasLayout 的那个,当然现在溢出和浮动也是如此。
补充说
这又出现了:大脑不在假期模式..
我真的开始认为是的,clearfix 不是必需的(至少我还没有找到它所在的示例)即使上面的@thirtydot 示例也可以使用display: inline-block
并且仍然支持 IE6,容器具有固定宽度具有 IE7 及以下的 hasLayout 要求,并且通过使其成为所有其他浏览器的内联块,它可以居中,并且当容器垂直拉伸时,“偏移”粘性元素可以正常工作
我还看到了对那些使用 :before
以及:after
在 clearfix hack 中折叠边距的新改进 clearfix 的引用,但除非我遗漏了什么,否则 演示存在缺陷 -pre
元素和“clearfixed”框中的空白不均匀实际上不包含任何浮点数,只要您浮动其中的元素,每个方法都会执行相同的操作。
请注意,元素上的边距与pre
其他元素的反应并不相同(因此在测试时尝试使用填充而不是边距以查看相同的图片).. 还有另一个 IE“缺陷”,即 IE 不正确包含边距它们没有明确指定,并且在演示中有明确的边距,h2
但不是p
所有的东西都等于 TJK 在该页面中演示的 clearfixed 元素,人为地强制包含正常块元素上的边距,与 1px 顶部/底部填充的方式非常相似,因为浏览器无论如何都会以不同的方式执行此操作!
如果您这样做,则将元素浮动在这些容器内(无论如何都要清除)-边距确实包含您可能希望它们包含的内容,就像在新的块格式化上下文中一样-没有任何额外:before
的黑客部分,所有 clearfix 变体都同样有效!
查看重新加载的演示
所以在我看来,不再需要这种“clearfix”方式,只需找到创建新块格式上下文的最佳方法,使用旧版 IE 的 haslayout .. 两者的属性是相同的!
正如 TJK 在他的文章中指出的那样:http ://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified/
更好的选择
如果您可以将宽度应用于包含浮动的元素,那么您最好的选择是使用:
display: inline-block;
width: <any
explicit value>;
我认为这是公平的,即使 100% 的元素可能需要填充,您也可以结合使用box-sizing
.clearfix {
display: inline-block;
width: 100%;
*width: auto;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}