彻底解决浮动引起的div不能撑开的问题,css技巧

    前端开发人员在学习别人的代码的时候肯定能经常看"

"这样的代码,但是你真的能明白它是做什么用的吗?比如:

<div style="border:2px solid red;"> 
    <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div> 
    <div style="clear:both;"></div> 
</div>

    你可以将此部分代码放到一个HTML页面看看效果,然后在去掉"

"看一下效果,就知道这句话的作用了。

    原来后边的Clear:both;其实就是利用清除浮动来把外层的div撑开,所以有时候,我们在将内部div都设置成浮动之后,就会发现,外层div的背景没有显示,原因就是外层的div没有撑开,太小,所以能看到的背景仅限于一条线。

    但这种办法并不是最好的,可以通过更完美的方式实现。你只要到Google或者Baidu随便一搜"css清除浮动",就会发现很多网站都讲到"盒子清除内部浮动时可以用到.clearfix"。.clearfix不是一个技术的代名词,而是很多人都在使用相同的方法,并且取了个相同的名字。很多大型网站是这样写的:

<style> 
.clearfix:after{ 
    visibility: hidden; 
    display: block; 
    font-size: 0; 
    content: "."; 
    clear: both; 
    height: 0; 
} 
* html .clearfix{zoom: 1;} 
*:first-child + html .clearfix{zoom: 1;} 
</style> 
<div class="clearfix" style="border: 2px solid red;"> 
    <div style="float: left; width: 80px; height: 80px; border: 1px solid blue;"> 
        我的网站 www.jcodecraeer.com </div> 
</div>

看完解决办法,咱们来看里边的原理:

首先是利用:after这个伪类来兼容FF、Chrome等支持标准的浏览器。

:after伪类用来和content属性一起使用设置在对象后的内容,例如:

a:after{content``:``"(link)"``;}

这个CSS将会让a标签内的文本后边加上link文本文字。同理

.clearfix:after{  
    visibility: hidden;  
    display: block;  
    font-size: 0;  
    content: ".";  
    clear: both;  
    height: 0;  
}

这个css给class为clearfix的元素后面加了个文本内容为“.”,清除两边浮动,`内容不可见的块元素。也就相当于"<div style="clear:both;"></div>"。用.clearfix:after伪类的目的,仅仅是不想去写一个无意义的div在后面。如果你不觉得"<div style="clear:both;"></div>"影响代码的美观,你完全可以忽略.clearfix:after。`

但是IE不支持:after伪类。

利用"* html"这个只有IE6认识的选择符,设置缩放属性"zoom: 1;"触发hasLayout,从而使元素闭合内部的浮动。实现兼容IE6。至于什么是hasLayout,可以自己百度一下。我对hasLayout的认识就是,这是微软留给开发人员的蛋疼东西,只知道该怎么用就行了,不想去了解它。

利用"*:first-child + html"这个只有IE7认识的选择符,设置缩放属性"zoom: 1;"实现兼容IE7。