.clearfix:before,
.clearfix:after{
content:"";
diaplsy:table;
}
.clearfix:after{
clear:both;
}
//IE/6/7
.clearfix {
*zoom:1;
}
:after伪类在元素末尾插入一个包含空格的字符,并设置display为table
display:table会创建一个匿名的table-cell,从而触发BFC(块级格式上下文),因为容器内float的元素也是BFC,由于BFC有不能互相重叠的特性,并且设置了clear:both,:after插入的元素会被挤到容器底部,从而将容器撑高,并且设置display:table之后,content中的空格字符会被渲染成0*0的空白元素,不会占用页面空间
为什么content要包含一个空格?
content包含一个空格是为了解决Opera浏览器的BUG,当content没有包含空格的话,会造成清除浮动元素的顶部和底部有一个空白
:after伪类的设置已经达到了清除浮动的目的,但是还要设置:before伪类,是为什么呢?
:before的设置也触发了一个BFC,由于BFC有内部布局不受外部影响的特性,因此:before的设置可以阻止margin-top的合并
zoom:1的效果也是阻止margin-top合并