What is a clearfix?
最近我浏览了一些网站的代码,发现每个
在一次快速的谷歌搜索之后,我了解到它有时适用于IE6,但什么是ClearFix?
与没有ClearFix的布局相比,您能提供一些带有ClearFix的布局示例吗?
如果您不需要支持IE9或更低版本,您可以自由使用flexbox,并且不需要使用浮动布局。
值得注意的是,今天,使用浮动元素进行布局越来越不鼓励使用更好的替代方案。
display: inline-block —更好- flexbox-最佳(但浏览器支持有限)
flexbox支持Firefox 18、Chrome 21、Opera 12.10和Internet Explorer 10、Safari 6.1(包括Mobile Safari)以及Android的默认浏览器4.4。
有关详细的浏览器列表,请参阅:http://canius.com/flexbox。
(也许一旦它的位置完全确定,它可能是布局元素的绝对推荐方法。)
ClearFix是一种元素自动清除其子元素的方法,这样您就不需要添加额外的标记。它通常用于浮动布局,其中元素浮动以水平堆叠。
ClearFix是一种解决浮动元素零高度容器问题的方法。
ClearFix执行如下:
1 2 3 4 5 6 7 | .clearfix:after { content:""; /* Older browser do not support empty content */ visibility: hidden; display: block; height: 0; clear: both; } |
或者,如果您不需要IE<8支持,以下也可以:
1 2 3 4 5 | .clearfix:after { content:""; display: table; clear: both; } |
通常,您需要执行以下操作:
1 2 | Sidebar <!-- Clear the float --> |
使用ClearFix,您只需要以下内容:
1 2 | Sidebar <!-- No Clearing div! --> |
阅读本文-作者Chris Coyer@css tricks
如果您通过可视化学习,此图片可能会帮助您理解ClearFix的功能。
其他答案是正确的。但我想补充一点,这是人们第一次学习CSS,并滥用
如今,
有几个版本的ClearFix,其中NicolasGallagher和ThierryKoblentz是主要作者。
如果您希望支持较旧的浏览器,最好使用此ClearFix:
1 2 3 4 5 6 7 8 9 10 11 12 | .clearfix:before, .clearfix:after { content:""; display: table; } .clearfix:after { clear: both; } .clearfix { *zoom: 1; } |
在SCSS中,可以使用以下技术:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | %clearfix { &:before, &:after { content:""; display:table; } &:after { clear:both; } & { *zoom:1; } } #clearfixedelement { @extend %clearfix; } |
如果您不关心支持旧的浏览器,有一个较短的版本:
1 2 3 4 5 | .clearfix:after { content:""; display:table; clear:both; } |
对2017年第二季度的情况进行更新。
firefox 53、chrome 58和opera 45中提供了一个新的css3显示属性。
1 2 3 | .clearfix { display: flow-root; } |
请在此处检查任何浏览器的可用性:http://caniuse.com/feat=flow root
元素(其显示属性设置为Flow Root)生成一个块容器框,并使用流布局来布局其内容。它总是为其内容建立一个新的块格式上下文。
这意味着,如果使用包含一个或多个浮动子级的父DIV,则此属性将确保父级包含其所有子级。不需要任何ClearFix黑客。在任何子元素上,甚至不是最后一个虚拟元素上(如果在最后一个子元素上使用clearfix变量with:before)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | .container { display: flow-root; background-color: Gainsboro; } .item { border: 1px solid Black; float: left; } .item1 { height: 120px; width: 120px; } .item2 { height: 80px; width: 140px; float: right; } .item3 { height: 160px; width: 110px; } |
1 2 3 4 | This container box encloses all of its floating children. Floating box 1 Floating box 2 Floating box 3 |
简单地说,ClearFix是一个黑客。
这是我们所有人都必须忍受的丑陋的事情之一,因为它确实是确保浮动的儿童元素不会溢出父母的唯一合理方式。还有其他的布局方案,但是浮动在今天的Web设计/开发中太常见了,以至于不能忽略ClearFix黑客的价值。
我个人倾向于使用Micro Clearfix解决方案(Nicolas Gallagher)
10参考
在基于CSS浮动的布局中,一种常用的技术是将少量的CSS属性分配给您知道将包含浮动元素的元素。该技术通常使用名为
1 2 3 4 5 6 7 8 | .clearfix:after { content:"."; display: block; height: 0; clear: both; visibility: hidden; zoom: 1 } |
这些组合行为的目的是创建一个容器
实现ClearFix的另一个(可能也是最简单的)选项是在包含元素上使用
1 2 3 4 5 6 7 8 9 10 | .parent { background: red; overflow: hidden; } .segment-a { float: left; } .segment-b { float: right; } |
1 2 3 4 | Float left Float right |
当然,这只能在不希望内容溢出的情况下使用。
我试过了被接受的答案,但内容对齐仍然有问题。如下图所示,添加":before"选择器修复了问题:
1 2 3 4 5 6 7 8 9 10 11 | // LESS HELPER .clearfix() { &:after, &:before{ content:""; /* Older browser do not support empty content */ visibility: hidden; display: block; height: 0; clear: both; } } |
上面的代码将编译为下面的CSS:
1 2 3 4 5 6 7 8 9 | clearfix:after, clearfix:before { content:""; /* Older browser do not support empty content */ visibility: hidden; display: block; height: 0; clear: both; } |
这里有一个不同的方法,相同的东西,但有点不同
差异是内容点,用
有关更多信息,请访问http://www.jqui.net/tips-tricks/css-clearfix/
1 2 3 4 5 | .clearfix:after { content:"\00A0"; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;} .clearfix{ display: inline-block;} html[xmlns] .clearfix { display: block;} * html .clearfix{ height: 1%;} .clearfix {display: block} |
这是一个紧凑的版本…
1 | .clearfix:after { content:"\00A0"; display: block; clear: both; visibility: hidden; line-height: 0; height: 0;width:0;font-size: 0px}.clearfix{ display: inline-block;}html[xmlns] .clearfix { display: block;}* html .clearfix{ height: 1%;}.clearfix {display: block} |