清除浮动的方法

float浮动

float属性定义元素在哪个方向浮动。在CSS中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。同时默认情况下,盒子的宽度不在伸展,而是根据盒子里面的内容的宽度来确定。

浮动带来的弊端

1.块状元素,会跑到浮动下面,被覆盖了

2.行内文字会围绕浮动环绕,为浮动元素留出空间

3.浮动元素的父元素塌陷

清除浮动–解决高度塌陷

1. 给浮动元素的父元素内末尾添加带clear属性的空元素

<div style="clear:both;"></div>

新的空div块下移,达到撑开父元素的目的。

2.给浮动元素的容器添加浮动

.container{
  float:left;
}

3. 给浮动元素的容器(父元素)添加overflow + zoom

.fix{
  overflow:hidden; 
  zoom:1;
}

IE下清除浮动很简单,使元素haslayout=true就可以了。不管是设置宽度值、高度值(除了auto)、display(=inline-block)、绝对定位、zoom (不为normal或null)、浮动(不为none)本身都可以让元素haslayout为true。

zoom是IE专有属性,可以设置对象缩放比例。显然,首选zoom:1,这样做不会干扰任何样式。

非IE浏览器常用的是overflow属性,overflow:hidden;或是overflow:scroll auto都可以,不过由于后者经常一不小心出现滚动条, 所以前者用的更多些。

4. 给浮动元素的容器添加after伪类 + zoom

先来简单讲讲after,所谓after,就是指标签的最后一个子元素的后面。于是呢,我们可以用CSS代码生成一个具有clear属性的元素,其中的关键样式 就是content了。或许您从网上看到的content里面的内容是”.”一个点,我试了很多次,貌似随便写什么东西都没有问题, 比如content:’anything is ok’;没问题。于是有:

.fix{
  zoom : 1;
}
.fix : after{
  display : block; 
  content : ' '; 
  clear : both; 	
  line-height : 0; //height:0
}

这里的 line-height:0 写成height:0也是可以的。此方法可以说是综合起来最好的方法了,不会影响任何其他样式,通用性强,覆盖面广,比较推荐。

float与JavaScript

JavaScript可以改变CSS的属性,其他些属性还好,但是这个float值得一说,为何呢,因为float貌似是JavaScript中的一个关键字,不能使用 obj.style.float=”left”;这样的句子,得使用其他写法。

//IE浏览器
obj.style.styleFloat = "left";

//其他浏览器
obj.style.cssFloat = "left";
Table of Contents