清除浮动

为什么?

  1. 父级没高度
  2. 子盒子浮动了
  3. 影响了下面的布局

清除浮动的方式(4种)

  1. 额外标签法(在最后一个浮动标签后,新加一个标签,给其设置clear:both;)(不推荐)

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    .fahter{
    width: 400px;
    border: 1px solid deeppink;
    }
    .big{
    width: 200px;
    height: 200px;
    background: darkorange;
    float: left;
    }
    .small{
    width: 120px;
    height: 120px;
    background: darkmagenta;
    float: left;
    }
    .footer{
    width: 900px;
    height: 100px;
    background: darkslateblue;
    }
    .clear{
    clear:both;
    }
    </style>
    </head>
    <body>
    <div class="fahter">
    <div class="big">big</div>
    <div class="small">small</div>
    <div class="clear">额外标签法</div>
    </div>
    <div class="footer"></div>
    </body>
    </html>

  2. 父级添加overflow属性(父元素添加overflow:hidden)(不推荐)通过触发BFC方式,实现清除浮动。

    .fahter{
    width: 400px;
    border: 1px solid deeppink;
    overflow: hidden;
    }

    优点:代码简洁
    缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素
    不推荐使用

  3. 使用after伪元素清除浮动(推荐使用)

    <style>
    .clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
    content: "";
    display: block;
    height: 0;
    clear:both;
    visibility: hidden;
    }
    .clearfix{
    *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
    }
    </style>
    <body>
    <div class="fahter clearfix">
    <div class="big">big</div>
    <div class="small">small</div>
    <!--<div class="clear">额外标签法</div>-->
    </div>
    <div class="footer"></div>
    </body>

优点:符合闭合浮动思想,结构语义化正确
缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.
推荐使用

  1. 使用before和after双伪元素清除浮动
    <style>

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

    </style>
    <body>
    <div class="fahter clearfix">
    <div class="big">big</div>
    <div class="small">small</div>
    <!--<div class="clear">额外标签法</div>-->
    </div>
    <div class="footer"></div>
    </body>
    优点:代码更简洁
    缺点:用zoom:1触发hasLayout(为了兼容ie6).
    推荐使用