最近我在浏览一些网站的代码,看到每个<div>都有一个类clearfix。

在快速谷歌搜索后,我了解到它是IE6有时,但实际上什么是一个clearfix?

你能提供一些例子的布局与一个clearfix,比较没有一个布局clearfix?


当前回答

我尝试了接受的答案,但我仍然有一个问题的内容对齐。添加如下所示的“: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;
}

其他回答

如果你不需要支持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撰写的文章

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;
}

简单地说,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) */
}

参考

我尝试了接受的答案,但我仍然有一个问题的内容对齐。添加如下所示的“: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;
}

这是一个不同的方法,同样的东西,但有点不同

区别在于内容点被替换为\00A0 ==空格

更多信息http://www.jqui.net/tips-tricks/css-clearfix/

.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}

这是它的精简版……

.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}