zoukankan      html  css  js  c++  java
  • 清除浮动的几种方法

    好文推荐: 浮动和它的工作原理? 清除浮动的技巧? 

    下面这两种方法对于清除浮动都是不错的选择, 首先我们要知道清楚浮动一般都是在父元素上清楚浮动,即发生浮动的都是子元素,如何这个父元素要浮动,那我们就在这个父元素上再添加一个父元素。

      方法一:

       其中.chearfix是包含浮动的父元素

    /* 清理浮动 */
    .clearfix:after {
    visibility:hidden;
    // 这是为了让元素隐藏 display:block;
    // 因为content默认是inline-block,所以我们需要设置位block,这样才能占据一行。 font
    -size:0;
    // 这样空白也就没有了。 content:
    " ";
    // 注意: 这里是一个空格 clear:both;
    // 这里是重点 height:
    0;
    // 设置高度为0,防止对上下元素的布局产生影响。 } .clearfix { zoom:
    1; }
    // 这个一般是用于IE的,不用做过多的了解

      举例如下所示:

      未清除浮动的代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        .clearfix{
            background: #ccc;
        }
    
        .float_left{
            float: left;
             300px;
            height: 500px;
            background: #123455;
        }
        .float_right{
            float: right;
             480px;
            height: 500px;
            background: #541231;
        }
        </style>
    </head>
    <body>
        <div class="clearfix">
            <div class="float_left">这是在左边浮动的div</div>
            <div class="float_right">这是在右边浮动的div</div>
        </div>
        <div class="p">
            这是在浮动下面的文字
        </div>
    </body>
    </html>
    View Code

      效果如下:

    我们可以看到class为chearfix的div高度为0,并没有被其中的两个浮动的div撑开。且在clearfix下面的包含文字的div受影响到了最上面。

      于是我们再class为chrarfix的div的样式中添加上述清除浮动的代码,代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        .clearfix{
            background: #ccc;
        }
        /* 清理浮动 */
        .clearfix:after {
        visibility:hidden;
        display:block;
        font-size:0;
        content:" ";
        clear:both;
        height:0;
        }
        .clearfix {
        zoom:1;
        } 
    
        .float_left{
            float: left;
             300px;
            height: 500px;
            background: #123455;
        }
        .float_right{
            float: right;
             480px;
            height: 500px;
            background: #541231;
        }
        </style>
    </head>
    <body>
        <div class="clearfix">
            <div class="float_left">这是在左边浮动的div</div>
            <div class="float_right">这是在右边浮动的div</div>
        </div>
        <div class="p">
            这是在浮动下面的文字
        </div>
    </body>
    </html>
    View Code

      效果如下:

      这时我们发现clearfix的div已经被撑开,并且此div下面的div(即包含文字的div)也正常排在了最下面。

      其原理是,在「高级」浏览器中使用 :after 伪类在浮动块后面加上一个非 display:none 的不可见块状内容来,并给它设置 clear:both 来清理浮动。在 ie6 和 7 中给浮动块添加 haslayout 来让浮动块撑高并正常影响文档流。

    方法二:

      其中的.clearfix同样适用于包含浮动元素的父元素。代码如下:

        .clearfix:before, .clearfix:after {
           content:"";
           display:table;
        }
        .clearfix:after {
           clear:both;
        }
        .clearfix {
           zoom:1;
        }

      原理还是一样的。使用 :after 伪类来提供浮动块后的 clear:both。不同的是,隐藏这个空白使用的是 display: table。而不是设置 visibility:hidden;height:0;font-size:0; 这样的 hack。

      值得注意的是这里中的 :before 伪类。其实他是来用处理 margin-top 边折叠的,跟清理浮动没有多大的关系。但因为浮动会创建 block formatting context (BFC),这样浮动元素上的另而一元素上如果刚好有 margin-bottom 而这个浮动元素刚好有margin-top 的话,应该让他们不折叠(虽然这种情况并不常见)。

      所以直接写成下面的形式即可;

    1.         .clearfix.wrap:after {
                  content: "";
                  display: table;
                  clear: both;
              }
              .clearfix {
                   zoom: 1;    
              }

      总结:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>clearfix</title>
        <style>
            .header,
            .footer {
                height: 100px;
                background-color: #ccc;
            }
            .content {
                background-color: blue;
            }
    
            /*方法一*/
            /*.content {
                overflow: hidden;
                zoom: 1;
            }*/
    
    
            /*方法二*/
            .content:after {
                content: "";
                display: table;
                clear: both;
            }
            .content {
                zoom: 1;
            }
    
    
            /*方法三*/
            /*.content:after {
                content: " ";
                display: block;
                height: 0;
                font-size: 0;
                visibility: hidden;
                clear: both;
            }        
            .content {
                zoom: 1;
            }*/
    
    
    
    
            .left,
            .right {
                 200px;
                height: 200px;
                background: yellow;
            }
            .left {
                float: left;
            }
            .right {
                float: right;
            }
    
        </style>
    </head>
    <body>
        <div class="header"></div>
        <div class="content">
            <div class="left"></div>
            <div class="right"></div>
        </div>
        <div class="footer"></div>
    </body>
    </html>

      上面的三种方法都可以, 其中我比较推荐第二种。

  • 相关阅读:
    基于Live555实现RtspServer及高清高分辨率和高码率视频传输优化
    [开源]基于ffmpeg和libvlc的视频剪辑、播放器
    Android流媒体开发之路二:NDK C++开发Android端RTMP直播推流程序
    MP4大文件虚拟HLS分片技术,避免服务器大量文件碎片
    Android流媒体开发之路一:Camera2采集摄像头原始数据并手动预览
    DXGI快速截屏录屏技术
    一个RtspServer的设计与实现和RTSP2.0简介
    调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议
    抛开flash,自己开发实现C++ RTMP直播流播放器
    RTSP协议转换RTMP直播协议
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6339451.html
Copyright © 2011-2022 走看看