前端基础知识之清除浮动的几种方式

24 篇文章 0 订阅
12 篇文章 0 订阅

清除浮动

现象:不清除浮动会发生高度塌陷:
浮动元素父元素高度自适应(父元素不写高度时,子元素写了浮动后,父元素会发生高度塌陷)

  • clear清除浮动(添加空div法)在浮动元素下方添加空div,并给该元素写css样式:{clear:both;height:0;overflow:hidden;}
  • 给浮动元素父级设置高度;
<style type="text/css">
    .div1{background:#000080;border:1px solid red;/*解决代码*/height:200px;}
    .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>
    <div class="div1">
        <div class="left">Left</div>
        <div class="right">Right</div>
    </div>
    <div class="div2">
        div2
    </div>
    原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
    优点:简单、代码少、容易掌握
    缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
    建议:不推荐使用,只建议高度固定的布局时使用
  • 父级同时浮动(需要给父级同级元素添加浮动);
  • 父级设置成inline-block,其margin: 0 auto居中方式失效;
  • 利用br标签的clear属性;
    <style type="text/css">
       .div1{background:#000080;border:1px solid red;margin-bottom:10px;zoom:1}
        .div2{background:#800080;border:1px solid red;height:100px}
        .left{float:left;width:20%;height:200px;background:#DDD}
        .right{float:right;width:30%;height:80px;background:#DDD}
        .clearfloat{clear:both}
    </style>
        <div class="div1">
            <div class="left">Left</div>
            <div class="right">Right</div>
            <br class="clearfloat" />
        </div>
        <div class="div2">
             div2
        </div>
    原理:父级div定义zoom:1来解决IE浮动问题,结尾处加 br标签 clear:both
    建议:不推荐使用,只作了解。
  • 给父级添加overflow:hidden 清除浮动方法;
    <style type="text/css">
        .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:hidden}
        .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
        .left{float:left;width:20%;height:200px;background:#DDD}
        .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
        <div class="div1">
            <div class="left">Left</div>
            <div class="right">Right</div>
        </div>
        <div class="div2">
             div2
        </div>
        原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
        优点:简单、代码少、浏览器支持好
        缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
        建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。
  • 父级定义overflow:auto display:table
    <style type="text/css">
        .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:auto}
        .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
        .left{float:left;width:20%;height:200px;background:#DDD}
        .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
        <div class="div1">
            <div class="left">Left</div>
            <div class="right">Right</div>
        </div>
        <div class="div2">
            div2
        </div>

    原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
    优点:简单、代码少、浏览器支持好
    缺点:内部宽高超过父级div时,会出现滚动条。
    建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。
  • 父级div定义 伪类:after 和 zoom
    <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}
        /*清除浮动代码*/
        .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0;overflow:hidden;}
        /*IE6下不支持after属性*/
        .clearfloat{zoom:1}
    </style>
        <div class="div1 clearfloat">
            <div class="left">Left</div>
            <div class="right">Right</div>
        </div>
        <div class="div2">
            div2
        </div>

    原理:IE8以上和非IE浏览器才支持:after,原理和方法1有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
    优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
    缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。
    建议:推荐使用,建议定义公共类,以减少CSS代码。
  • 万能清除法 after伪类 清浮动(现在主流方法,推荐使用);
.float_div:after{
    content:".";
    clear:both;
    display:block;
    height:0;
    overflow:hidden;
    visibility:hidden;
}
.float_div{
    zoom:1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值