首先,什么叫做浮动?通常情况下,元素都是按默认文档流排列,而浮动则是让默认文档流下的元素漂浮起来水平排列。浮动排列顺序不会发生改变,默认时谁在第一位,浮动时便排在第一个。

  但是给元素设置浮动后会带来一些影响:

  (1)在父级没有给高度的情况下,子级浮动,父级会没有高度

  (2)行内元素浮动后可支持宽高

  (3)文本会给浮动元素让位,可以制作文本绕排结果

  举例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .clearfix{background-color: yellow;}
            .d1{width: 100px;height: 100px;background-color: cyan;}
            .d2{width: 100px;height: 100px;background-color: red;}
        </style>
    </head>
    <body>
        <div class="clearfix">
            <div class="d1">div1</div>
            <div class="d2">div2</div>
        </div>
    </body>
</html>

这是没有添加浮动的效果图

    

接下来我们给div和div2添加一个左浮动,效果如下:

    

此时我们会发现div1和div2已经左浮动,但是父级却没有了高度,这会影响我们的页面布局,此时我们需要解决浮动带来的这个影响,清除浮动,解决办法有多种:

  第一种:在父级内容后添加一个空的div,再添加 clear:both;(不推荐使用,会在页面上添加太多的无用标签,让页面复杂化)

  第二种:给父级设置  overflow:hidden;(不推荐使用,该属性与定位一起使用时会产生问题,会触发bfc,有兴趣的可以自己百度bfc)

  第三种:使用伪元素after(这个代码可以强记住)

      

           .clearfix:after{
                content:"";
                height: 0;
                line-height: 0;
                display: block;
                visibility: hidden;
                clear: both;
            }
            .clearfix{
                /*针对IE678,其余浏览器可不写*/
                zoom: 1;
            }                

 

  第四种:使用双伪元素:after和before

     

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

 

以上四种方法清除浮动,推荐使用第三种,可以把那几行代码牢牢记住

清除浮动带来的影响后,最终代码及效果如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .clearfix{background-color: yellow; }
            .d1{width: 100px;height: 100px;background-color: cyan;float: left;}
            .d2{width: 100px;height: 100px;background-color: red;float: left;}
            
            .clearfix:after{
                content:"";
                height: 0;
                line-height: 0;
                display: block;
                visibility: hidden;
                clear: both;
            }
            .clearfix{
                zoom: 1;
            }
        </style>
    </head>
    <body>
        <div class="clearfix">
            <div class="d1">div1</div>
            <div class="d2">div2</div>
        </div>
    </body>
</html>

 

posted on 2018-12-11 19:07  薇依  阅读(935)  评论(0编辑  收藏  举报