当前位置: 首页 > 图文教程 > 网页制作 > CSS样式表 > CSS 实例实现清除浮动

CSS样式表
CSS 书写有怎样的功能
FireFox中上层高度不影下层的解决办法
CSS text-shadow属性
CSS @import与link的具体区别
详解css 定位与定位应用
网页设计新手30条进阶秘技
CSS分栏布局的方法:绝对定位和浮动
针对IE8正式版的CSS hack
条件 CSS的使用
CSS 垂直居中五种实现方法
CSS教程 汇总让IE6崩溃的几种方法
左上角图片文字环绕在图片右侧
鼠标指向网页图片时图片周围显示虚线框
CSS 快速提升设计可读性和维护性
CSS3 完美实现圆角效果
网页排版 5个CSS基础
CSS3 圆角效果
HTML5 CSS3给网站设计带来出色效果
CSS 网页布局 表格制作实例
css 滚动条换色调整代码

CSS样式表 中的 CSS 实例实现清除浮动


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 55 ::
收藏到网摘: n/a

在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有clear,导致不能被撑开。看下面的例子:

HTML4STRICT代码:
       
  1.    
    <div style="width:200px;border:1px solid red;">
       
  2.    
  3.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  4.    
  5.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  6.    
  7.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  8.    
  9.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  10.    
  11.    
      <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  12.    
  13.    
    </div>
       


显示的结果如下:

P_1160709253_0.gif
容器DIV没有被撑开

大家可以看到,作为外部容器的边框为红色的DIV,没有被撑开。这是因为内部的DIV因为float:left之后,就丢失了clear:both和display:block的样式,所以外部的DIV不会被撑开。
我们想让外部容器的DIV随着内部DIV增多而增加高度,要怎么解决呢?

以前我都是用这样的方法来解决:
HTML4STRICT代码:
       
  1.    
    <div style="width:200px;border:1px solid red;">
       
  2.    
  3.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  4.    
  5.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  6.    
  7.    
       <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  8.    
  9.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  10.    
  11.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  12.    
  13.    
        <div style="clear:both;"></div>
       
  14.    
  15.    
    </div>

    显示的结果如下:

       
P_1160709321_0.gif
显示正常了

我们看到,在容器DIV内要显示出来的float:left的所有的DIV之后,我们添加了这样的一个DIV:<div style="clear:both"></div>  。这样,其实就在最后增加了clear的动作。

但是,我总觉得,这么多加一个DIV有点不妥。一是多了一个没有意义的DIV,二是在用dojo做Drag & Drop的时候,由于这个DIV是容器DIV的一个字节点,如果这个节点被移动,则会造成排版上的Bug:如果要显示的蓝框的DIV被移到这个DIV之后,则因为clear:both,它会被强制换一行显示。所以,我一直在寻找更好的解决办法。

昨天在无数次的询问了Google大仙后,我终于找到了How To Clear Floats Without Structural Markup 这篇文章,找到了解决的办法。

首先设置这样的CSS:
CSS代码:
       
  1.    
    .clearfix:after {
       
  2.    
  3.    
        content: ".";
       
  4.    
  5.    
        display: block;
       
  6.    
  7.    
        height: 0;
       
  8.    
  9.    
        clear: both;
       
  10.    
  11.    
        visibility: hidden;
       
  12.    
  13.    
    }
       
然后,我们再修改原来的HTML代码,让外部的容器DIV来使用这个CSS:
HTML4STRICT代码:
       
  1.    
    <div style="width:200px;border:1px solid red;" class="clearfix">
       
  2.    
  3.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  4.    
  5.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  6.    
  7.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  8.    
  9.    
        <div style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  10.    
  11.    
       <div  style="float:left;width:80px;height:80px;border:1px solid blue;">TEST DIV</div>
       
  12.    
  13.    
    </div>
       
在Firefox里测试一下,哈哈,这样做的确很有效,显示正常,而且dojo的 Drag & Drop 也不会有问题了。原来,这个clearfix的CSS使用了after这个伪对象,它将在应用clearfix的元素的结尾添加content中的内容。在这里添加了一个句号".",并且把它的display设置成block;高度设为0;clear设为both;visibility设为隐藏。这样就达到了撑开容器的目的啦。

但是,在文章中说,Windows IE并不支持这样做。所以要让IE也完美显示,则必须在clearfix这个CSS定义的后面加上一些专门为IE设定的HACK。CSS如下:
CSS代码:
       
  1.    
    .clearfix:after {
       
  2.    
  3.    
        content: ".";
       
  4.    
  5.    
        display: block;
       
  6.    
  7.    
        height: 0;
       
  8.    
  9.    
        clear: both;
       
  10.    
  11.    
        visibility: hidden;
       
  12.    
  13.    
    }
       
  14.    
  15.    
    /* Hides from IE-mac \*/
       
  16.    
  17.    
    * html .clearfix {height: 1%;}
       
  18.    
  19.    
    /* End hide from IE-mac */
       
因为转义字符"\",Mac IE浏览器会忽略掉这段Hack,但Windows IE不会,它会应用 * html .clearfix {height: 1%;} 来达到撑开DIV容器的目的(貌似Mac IE没有办法解决这个问题,不过幸好用户数量是在是太少了,Safari支持就可以了:p)。

测试一下,果然大功告成。

P_1160709321_0.gif