zoukankan      html  css  js  c++  java
  • ▲浅谈清除浮动

      浮动具有包裹和破坏两个特性,正因为这样,它才可以用来布局,实现丰富多彩的网页。但也因为这样,使得页面经常出现错乱,于是有了清除浮动。

      那么,清除浮动都有哪些方式呢?它们各自都有什么优缺点?我们该怎么选择以得到最适合我们的清除浮动样式呢?接下来我将谈谈自己在开发中总结的一点点经验。先写下一段代码,我将用他进行说明。

    /*css 代码*/
      
    <style type="text/css">
        .fl{
    float:left;} .fr{float:right;}
        .clear{clear:both;}
        .dib{display:inline
    -block;} .dt{display:table;} .dtc{display:table-cell;}
        .ovh{overflow:hidden;} .zoom{zoom:
    1;} .clear-float{overflow:hidden;zoom:1;}
        .clearfix:after{clear:both;display:block;visibility:visible;height:
    0;line-height:0;content:"";} .clearfix{zoom:1;s}
      
    </style>

    /*html代码*/
      
    <div class="box">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>

      以上就是本篇文字将要用到的例子。

    ============================================================================================

      清除浮动的方式及各自的优缺点

      1、<br />标签的clear属性;(参考自:林小志《css那些事儿:掌握网页样式与css布局核心技术》)

      2、css样式的clear属性;

      3、display相关属性值;

      4、overflow的非visible属性值;

      5、zoom:1清除浮动;

      6、:after伪类

      7、表格嵌套浮动内容(没有试过这种用法,但为了解决浮动而增加一层表格结构标签,先入为主地就把它给pass了。在此只是想说明有这么一种用法。)

      用法说明:(以代码演示)

      1、

       <div class="box">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
        
    <br class="all" />
      
    </div>

      缺点:(1)多了一层结构化标签;(2)标签必须进行合理地(即:br标签须放在浮动层之后立即清除)嵌套,否则无法实现清除效果;

      2、

      <div class="box">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
        
    <div class="clear"></div>
      
    </div>

      或:

      <div class="box">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>  

      <div class="clear other-box"></div>

      缺点:(1)多了一层结构化标签;(2)有可能出现清除效果不佳的情况,如在ie6下有出现过高度变高的情况,或许还有其他的问题。不解释...

      3、 

      <div class="box dib">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>
      或
      
    <div class="box dt">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
        
    <div class="clear"></div>
      
    </div>
      或
      
    <div class="box dtc">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
        
    <div class="clear"></div>
      
    </div>

      简:这三个样式的用法可以归结为一类,首先它们都能用来清除浮动,其次它们都有共同的缺点,如下:

      缺点:右浮动层失效,变为左浮动层(这个有待进一步确认:1、成左浮动层,那么它就具有包裹性;2、不是浮动层,随左浮动层自适应浮动。检测方法可用firebug调试),内容往左浮动层靠。要用它们的唯一出路就是设定宽度。

      4、

      <div class="box ovh">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>

      缺点:1、只能清除标准浏览器的浮动,对于ie6这类老古董无效;2、浮动层里有层级定位块的时候,层级块会被隐藏 ,解决的办法就是把overlow的属性值改为auto;但是auto貌似也有局限性,没用过也没碰过,所以无权发言,掠过...

      5、

      <div class="box zoom">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>

       缺点:ie浏览器的私有属性,无法通过css的验证;

      补充:结合4、5两点存在的问题,我们可以把两者结合起来用,代码如下:  

       <div class="box clear-float">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>

      6、

        <div class="box clearfix">
        
    <div class="fl"></div>
        
    <div class="fr"></div>
      
    </div>

      缺点:after伪类的属性不被ie6支持,所以需要添加zoom:1来针对ie6进行清除浮动。有一点,content后面最好是为空。

    =============================================================================

      写在后面的话:

      只要用到了浮动,就为页面买下来布局的隐患,正确的语义、合理的结构、简洁的代码,将是你避免浮动造成布局问题的一个关键所在;在清除浮动的问题上,我们可以选择适合自己的方式,这往往可以根据自己开发项目的大小来决定。一个小项目,也许只需要clear就能够解决了;而对于大的项目,即使碰到clear-float说不定也要出现诸多问题,但是当我们了解了它们之间的优缺点,扬长避短,还是可以解决问题的。

  • 相关阅读:
    CodeForces 459D Pashmak and Parmida's problem
    cf 459c Pashmak and Buses
    hdu 1006 Tick and Tick 有技巧的暴力
    hdu 1005 Number Sequence
    hdu 1004 Let the Balloon Rise
    c++ 单引号和双引号
    c++一些总结
    剑指offer23 从上往下打印二叉树
    E: Unable to locate package
    vector
  • 原文地址:https://www.cnblogs.com/balaixianren/p/2096626.html
Copyright © 2011-2022 走看看