zoukankan      html  css  js  c++  java
  • CSS清除浮动8大方法

    CSS清除浮动是每一位web前端工程师都要掌握的技术,也是让每一位刚入门的前端工程师感到头疼的问题,

    下面就来讲一下CSS清除浮动的原理和各种解决方法,大家可以根据实际情况选择最佳的解决方案。 

    在用DIV+CSS布局时通常都会用到浮动(float)来完成页面布局,浮动(float)会使当前标签产生向上浮的效果,同时会影响到前后标签、父级标签的位置及 width height 属性。如果在布局中使用了浮动(float)而未进行合理的清除浮动,就会使页面产生错误。 

    这时就需要用到清除浮动的方法来解决页面产生的错误,而且同样的代码,在各种浏览器中显示效果也有可能不相同,这样让清除浮动更难了。解决浮动引起的问题有多种方法,但有些方法在浏览器兼容性方面还有问题。  

    下面总结整理8种清除浮动的方法供大家学习和参考,不同的方法可以让我们更好的了解清除浮动的原理,使用时选取最合适的一种方法即可: 

    1.父级div定义height

    <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;20%;height:200px;background:#DDD} 
      .right{float:right;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不一样时,会产生问题 ;

    建议:不推荐使用,只建议高度固定的布局时使用 。

    2.结尾处加div标签 clear:both

    <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;20%;height:200px;background:#DDD} 
      .right{float:right;30%;height:80px;background:#DDD} 
      /*清除浮动代码*/ 
      .clearfloat{clear:both} 
    </style> 
    
    <div class="div1"> 
        <div class="left">Left</div> 
        <div class="right">Right</div> 
        <div class="clearfloat"></div> 
    </div> 
    <div class="div2"> 
        div2 
    </div> 

    原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度 ;

    优点:简单、代码少、浏览器支持好、不容易出现怪问题 ;

    缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好 ;

    建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法 。

    3.父级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;20%;height:200px;background:#DDD} 
      .right{float:right;30%;height:80px;background:#DDD} 
      /*清除浮动代码*/ 
      .clearfloat::after{display:block;clear:both;content:"";visibility:hidden;height:0}
      .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,原理和方法2有点类似,zoom(IE转有属性)可解决IE6、IE7浮动问题;

    优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾讯、网易、新浪等) ;

    缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持;

    建议:推荐使用,建议定义公共类,以减少CSS代码。

    4.父级div定义 overflow:hidden

    <style type="text/css"> 
      .div1{background:#000080;border:1px solid red;/*解决代码*/98%;overflow:hidden} 
      .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;98%} 
      .left{float:left;20%;height:200px;background:#DDD} 
      .right{float:right;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理解比较深的朋友使用。

    5.父级div定义 overflow:auto

    <style type="text/css"> 
        .div1{background:#000080;border:1px solid red;/*解决代码        
        */98%;overflow:auto} 
        .div2{background:#800080;border:1px solid red;height:100px;margin-        top:10px;98%} 
        .left{float:left;20%;height:200px;background:#DDD} 
        .right{float:right;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时,会出现滚动条;

    建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

    6.父级div也一起浮动

    <style type="text/css"> 
        .div1{background:#000080;border:1px solid red;/*解决代码    */98%;margin-bottom:10px;float:left} 
        .div2{background:#800080;border:1px solid red;height:100px;98%;/*解决代码*/clear:both} 
        .left{float:left;20%;height:200px;background:#DDD} 
        .right{float:right;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> 

    原理:所有代码一起浮动,就变成了一个整体 ;

    缺点:会产生新的浮动问题;

    建议:不推荐使用,只作了解。

    7.父级div定义 display:table

    <style type="text/css"> 
        .div1{background:#000080;border:1px solid red;/*解决代码*/98%;display:table;margin-bottom:10px;} 
        .div2{background:#800080;border:1px solid red;height:100px;98%;} 
        .left{float:left;20%;height:200px;background:#DDD} 
        .right{float:right;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属性变成表格 ;

    缺点:会产生新的未知问题;

    建议:不推荐使用,只作了解。

    8.结尾处加 br标签 clear:both

    <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;20%;height:200px;background:#DDD} 
        .right{float:right;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 ;

    建议:不推荐使用,只作了解。 

    总结:以上8种方法分别从不同的方向去解决浮动带来的问题,不同的代码也会存在不同的问题,在我们实际使用中推荐使用第三种方法来进行清除浮动,其他方法用来了解即可。

  • 相关阅读:
    不可小视视图对效率的影响力
    Maximum Margin Planning
    PhysicsBased Boiling Simulation

    Learning Behavior Styles with Inverse Reinforcement Learning
    Simulating Biped Behaviors from Human Motion Data
    Nearoptimal Character Animation with Continuous Control
    Apprenticeship Learning via Inverse Reinforcement Learning
    回报函数学习的学徒学习综述
    Enabling Realtime Physics Simulation in Future Interactive Entertainment
  • 原文地址:https://www.cnblogs.com/chen0307/p/9604991.html
Copyright © 2011-2022 走看看