最近我在浏览一些网站的代码,看到每个<div>都有一个类clearfix。
在快速谷歌搜索后,我了解到它是IE6有时,但实际上什么是一个clearfix?
你能提供一些例子的布局与一个clearfix,比较没有一个布局clearfix?
最近我在浏览一些网站的代码,看到每个<div>都有一个类clearfix。
在快速谷歌搜索后,我了解到它是IE6有时,但实际上什么是一个clearfix?
你能提供一些例子的布局与一个clearfix,比较没有一个布局clearfix?
当前回答
简单地说,clearfix是一种hack。
这是我们不得不忍受的丑陋事情之一,因为这是确保浮动子元素不会溢出它们的父元素的唯一合理方法。还有其他的布局方案,但浮动在今天的网页设计/开发中太常见了,不能忽视clearfix hack的价值。
我个人倾向于Micro Clearfix解决方案(Nicolas Gallagher)
.container:before,
.container:after {
content:"";
display:table;
}
.container:after {
clear:both;
}
.container {
zoom:1; /* For IE 6/7 (trigger hasLayout) */
}
参考
其他回答
clearfix允许容器包装其浮动子容器。如果没有clearfix或等效的样式,容器就不会围绕它的浮动子容器而崩溃,就好像它的浮动子容器是绝对定位的一样。
clearfix有几个版本,Nicolas Gallagher和Thierry Koblentz是主要作者。
如果你想要支持旧的浏览器,最好使用这个clearfix:
.clearfix:before, .clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
在SCSS中,你可以使用以下技巧:
%clearfix {
&:before, &:after {
content:" ";
display:table;
}
&:after {
clear:both;
}
& {
*zoom:1;
}
}
#clearfixedelement {
@extend %clearfix;
}
如果你不关心是否支持旧的浏览器,有一个更短的版本:
.clearfix:after {
content:"";
display:table;
clear:both;
}
提供2017年第二季度的最新情况。
新的CSS3显示属性在Firefox 53、Chrome 58和Opera 45中可用。
.clearfix {
display: flow-root;
}
查看任何浏览器的可用性:http://caniuse.com/#feat=flow-root
元素(其显示属性设置为flow-root)生成一个块容器框,并使用流布局布局其内容。它总是为其内容建立一个新的块格式化上下文。
这意味着如果你使用一个包含一个或几个浮动子div的父div,这个属性将确保父div包含它所有的子div。没有任何需要一个clearfix hack。在所有子元素上,甚至不能是最后一个虚拟元素(如果您在最后一个子元素上使用:before的clearfix变体)。
.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; } <div class="container"> This container box encloses all of its floating children. <div class="item item1">Floating box 1</div> <div class="item item2">Floating box 2</div> <div class="item item3">Floating box 3</div> </div>
如果你不需要支持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。
详细的浏览器列表请参见:https://caniuse.com/flexbox。
(也许一旦它的位置完全确立,它可能是绝对推荐的布局元素的方式。)
clearfix是一种元素自动清除其子元素的方法,这样您就不需要添加额外的标记。它通常用于浮动布局中,其中元素被浮动以水平堆叠。
clearfix是一种解决浮动元素零高度容器问题的方法
clearfix的执行如下:
.clearfix::after {
content: " "; /* Older browser do not support empty content */
visibility: hidden;
display: block;
height: 0;
clear: both;
}
或者,如果你不需要IE<8的支持,下面的也可以:
.clearfix::after {
content: "";
display: table;
clear: both;
}
通常你需要做以下事情:
<div>
<div style="float: left;">Sidebar</div>
<div style="clear: both;"></div> <!-- Clear the float -->
</div>
使用clearfix,您只需要以下内容:
<div class="clearfix">
<div style="float: left;" class="clearfix">Sidebar</div>
<!-- No Clearing div! -->
</div>
阅读这篇由Chris Coyer @ CSS-Tricks撰写的文章
我尝试了接受的答案,但我仍然有一个问题的内容对齐。添加如下所示的“:before”选择器修复了这个问题:
// LESS HELPER
.clearfix()
{
&:after, &:before{
content: " "; /* Older browser do not support empty content */
visibility: hidden;
display: block;
height: 0;
clear: both;
}
}
上面的LESS将编译为下面的CSS:
clearfix:after,
clearfix:before {
content: " ";
/* Older browser do not support empty content */
visibility: hidden;
display: block;
height: 0;
clear: both;
}
在CSS基于浮动的布局中常用的一种技术是将少量CSS属性分配给你知道将包含浮动元素的元素。该技术通常使用名为clearfix的类定义来实现,(通常)实现以下CSS行为:
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
zoom: 1
}
这些组合行为的目的是创建一个容器:在活动元素之后,包含一个单独的'。'标记为隐藏,这将清除所有预先存在的浮动,并有效地重置页面的下一段内容。