【CSS】清除浮动的几种方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33237207/article/details/86739791

清除浮动是每一个web前端必须掌握的技能,下面就来看看有哪些方法吧。

以下面的场景为例,给大家展示一下不清除浮动带来的“车祸现场”。例子中有两个div,一个div1,一个div2,div1中包含一个向左浮动的div和一个向右浮动的div,为方便观察,给他们都添加了背景颜色,代码如下:

css:
<style type="text/css">
        .div1{background:#000080;border:1px solid red;}
        .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
        .left{float:left;width:20%;height:200px;background:#DDD}
        .right{float:right;width:30%;height:80px;background:#DDD}
</style>

html:
<div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
</div>
<div class="div2">div2</div>

执行出来效果如下:

下面来介绍一下几种清除浮动的方法,以上面例子为例,基本样式不变,修改部分代码可实现清除浮动:

方法1:给浮动元素的父级div添加高度,代码如下:

css:
<style type="text/css">
     .div1{.../*解决代码*/height:200px;}
     ...
</style>

执行出来的效果如下:

原理:父级div手动设置height,就解决了父级div无法自动获取高度的问题。缺点:只适合高度固定的布局,如果浮动元素的高度大于父级元素的高度,还是会存在问题。【不推荐使用,只建议高度固定的布局时使用】

方法2:在浮动元素的结尾处添加空的div标签,样式写clear:both,代码如下:

css:
<style type="text/css">
        ...
        /*清除浮动代码*/
        .clear{clear: both;}
</style>

html:
<div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="clear"></div>
</div>
<div class="div2">div2</div>

原理:利用css样式中的clear:both清除浮动,让父级div能自动获取到高度。缺点:如果页面浮动布局多,就要增加很多空div,让人感觉很不好。【不推荐使用,此方法是以前主要使用的一种清除浮动的方法】

方法3:给父级div添加一个class,定义伪类:after和zoom,代码如下:

css:
<style type="text/css">
    ...
    /*清除浮动代码*/       
    .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}
    .clearfloat{zoom:1}
</style>

html:
<div class="div1 clearfloat">
    ...
</div>
<div class="div2">div2</div>

原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE专有属性)可解决ie6,ie7浮动问题。【推荐使用,建议定义公共类,以减少CSS代码】

方法4:给父级div定义overflow:hidden,代码如下:

css:
<style type="text/css">
     .div1{.../*解决代码*/overflow:hidden;}
     ...
</style>

原理:使用overflow:hidden时,浏览器会自动检查浮动区域的高度。不能和position配合使用;不能同时定义height,不然超出的尺寸会被隐藏。【只推荐没有使用position或对overflow:hidden理解比较深的朋友使用】

上面说的是一些常用的方法,还有一些其他的方法,就不推荐给大家了。

附:启蒙链接:https://www.jb51.net/css/173023.html

猜你喜欢

转载自blog.csdn.net/qq_33237207/article/details/86739791