html如何清除浮动?



html如何清除浮动?在前面的《浮动元素有何性质》与《为何要闭合浮动》这两篇博文中,我们进行了详细的浮动元素特点以及清除浮动的必要性。今天我们来探讨一下,具体清除浮动可以采用哪些方法。最佳的选择方案是after伪元素清浮动。也是个人比较推荐的,具体如下。

 空标签清除浮动

.clear{clear : both;}

优点:通俗易懂,容易掌握。

缺点:会添加大量无语义空标签,结构与表现未分离,不利于维护。

 br标签清除浮动

优点:比空标签方式语义稍强,代码量较少。

缺点:结构与表现未分离,不推荐。

 父元素设置 overflow : hidden

优点:不存在结构和语义化问题,代码量少。

缺点:内容增多时候容易造成不会自动换行,导致内容被隐藏,无法显示需要溢出的元素。

IE6需要触发haslayout。

 父元素设置 overflow : auto

优点:不存在结构和语义化问题,代码量少。

缺点:多个嵌套后,FF某些情况会造成内容全选;IE中mouseover造成宽度改变时会出现最外层模块出现滚动条。

IE6需要触发haslayout。


 父元素浮动

优点:不存在结构和语义化问题,代码量少。

缺点:使得与父元素相邻的元素的布局会受到影响,不可能一直浮动到body,不推荐。

 父元素设置display:table

优点:结构语义化完全正确,代码量少。

缺点:盒模型属性已经改变,不推荐使用。

 使用:after 伪元素(不是伪类)

优点:结构和语义化完全正确,代码量居中。

缺点:复用方式不当会造成代码量增加。

由于IE6-7不支持:after,使用zoom:1触发hasLayout

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

1)display:block 使生成的元素以块级元素显示,占满剩余空间;

2)height:0 避免生成内容破坏原有布局的高度。

3)Unicode字符里有一个“零宽度空格”,也就是U+200B

,这个字符本身是不可见的,所以我们完全可以省略掉visibility:hidden

 4)zoom:1 触发IE hasLayout。