清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度为0的问题
给父盒子设置一个boder,并在其内部放两个盒子一个big 一个small,未给big和small设置浮动,则他们会默认撑开父盒子
当给内部两个盒子加上float属性时,顶部深蓝色盒子就会浮上来,然后父盒子因为没设置高度,变成一条线,big和small已经浮动了
由此可得,当父元素不给高度并且内部元素不浮动时会撑开;而浮动的时候,父元素变成一条线
方法一:父元素添加overflow:hidden
通过触发BFC方式,实现清除浮动
.fahter{
width: 400px;
border: 1px solid deeppink;
overflow: hidden;
}
优点:代码简洁
缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素
方法二:使用after伪元素清除浮动
content: "";
display: block;
height: 0;
clear:both;
visibility: hidden;
}
.clearfix{
*zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
<body>
<div class="fahter clearfix">
<div class="big">big</div>
<div class="small">small</div>
<!--<div class="clear">额外标签法</div>-->
</div>
<div class="footer"></div>
</body>
优点:符合闭合浮动思想,结构语义化正确
缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.