关于清除浮动的最佳方法

刚才看了http://www.w3cfuns.com/article-1287-1.html的这篇文章

才明白清楚浮动还有如此多的方法,作者总结了很多不够正确的方法,也给出了比较好的方法

.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; }

优点:结构和语义化完全正确,代码量居中
缺点:复用方式不当会造成代码量增加

1) display:block 使生成的元素以块级元素显示,占满剩余空间;
2) height:0 避免生成内容破坏原有布局的高度。
3) visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
4)通过 content:"."生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",有些版本可能content 里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:”" 仍然会产生额外的空隙;
5)zoom:1 触发IE hasLayout。
通过分析发现,除了clear:both用来清除浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。

 

闭合浮动

方法一:

相对于空标签闭合浮动的方法代码似乎还是有些冗余,通过查询发现Unicode字符里有一个“零宽度空格”,也就是U+200B,这个字符本身是不可见的,所以我们完全可以省略掉 visibility:hidden了

    .clearfix:after {content:"\200B"; display:block; height:0; clear:both; }
    .clearfix { *zoom:1; }

方法二:不大理解,因为第一次见过display:table

    /* For modern browsers */
    .cf:before,.cf:after {
    content:"";
    display:table;
    }
    .cf:after { clear:both; }/* For IE 6/7 (trigger hasLayout) */
    .cf { zoom:1; }

 

posted @ 2014-02-16 14:09  PiLee  阅读(1707)  评论(0编辑  收藏  举报