• 闭合浮动


    浮动属性:
      当一个元素使用float声明时,网络布局的规则会使元素浮动到其父元素的左侧或右侧,此时该元素的空间将脱离其父元素的限制,且之后的元素的布局也会受到影响(如margin元素的将会被忽视)。
     
    闭合浮动与清除浮动的区别:
      清除浮动:除对应的单词是 clear,对应CSS中的属性是 clear:left | right | both | none ,清除浮动一般是使用clear 属性即可
      闭合浮动:更确切的含义是使浮动元素闭合,从而减少浮动带来的影响,简而言之就是使包含框表现出正常的高度,闭合浮动一般要声明伪元素
      总结:用闭合浮动比清除浮动更加严谨,所以之后中文统一称之为闭合浮动
     
    图:闭合浮动与清除浮动的区别
    闭合浮动的各种方法:
      1.添加额外的标签:通过在浮动元素末尾添加一个空的标签,例如:<div style=”clear:both”></div>,其他标签br 等亦可
    1 <div class="wrap" id="float1">
    2     <h2>1)添加额外标签</h2>
    3     <div class="main left">.main{float:left;}</div>
    4     <div class="side left">.side{float:right;}</div>
    5     <div style="clear:both;"></div>
    6 </div>
    7 <div class="footer">.footer</div>

      缺点:会添加许多无意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦

      2.使用 br标签和其自身的 html属性,这个方法有些小众,br 有 clear=“all | left | right | none” 属性

    1 <div class="wrap" id="float2">
    2     <h2>2)使用 br标签和其自身的 html属性</h2>
    3     <div class="main left">.main{float:left;}</div>
    4     <div class="side left">.side{float:right;}</div>
    5     <br clear="all" />
    6 </div>
    7 <div class="footer">.footer</div>

      缺点:有违结构与表现分离

      3.父元素设置 overflow:hidden:通过设置父元素overflow值设置为hidden;在IE6中还需要触发 hasLayout ,例如 zoom:1;

    1 <div class="wrap" id="float3" style="overflow:hidden; *zoom:1;">
    2     <h2>3)父元素设置 overflow </h2>
    3     <div class="main left">.main{float:left;}</div>
    4     <div class="side left">.side{float:right;}</div>
    5 </div>
    6 <div class="footer">.footer</div>

      缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素

       4.父元素设置 overflow:auto 属性

    1 <div class="wrap" id="float3" style="overflow:auto; *zoom:1;">
    2     <h2>3)父元素设置 overflow </h2>
    3     <div class="main left">.main{float:left;}</div>
    4     <div class="side left">.side{float:right;}</div>
    5 </div>
    6 <div class="footer">.footer</div>

      缺点:多个嵌套后,firefox某些情况会造成内容全选

      5.父元素设置display : table

    1 <div class="wrap" id="float6" style="display:table;">
    2         <h3>4)父元素设置display:table</h3>
    3         <div class="main left">.main{float:left;}</div>
    4         <div class="side left">.side{float:right;}</div>
    5 </div>
    6 <div class="footer">.footer</div>

      缺点:盒模型属性已经改变,由此造成的一系列问题,得不偿失,不推荐使用

      6.使用:after 伪元素

     1 <style>
     2     .clearfix:after {
     3         clear: both;
     4         content: ".";
     5         display: block;
     6         height: 0;
     7         visibility: hidden;
     8     }
     9     
    10     .clearfix {
    11         *zoom: 1;
    12     }
    13 </style>
    14 <div class="wrap clearfix" id="floa7">
    15     <div class="main left">.main:wrap自己闭合浮动了,所以footer不用再清除浮动了(float:left)</div>
    16     <div class="side left">.side:我也浮动了(float:left)</div>
    17 </div>
    18 <div class="footer">.footer:这次 wrap 人品爆发了, 通过 .clearfix 已经<strong>闭合浮动</strong>了</div>

      缺点:复用方式不当会造成代码量增加

    结论:

      通过对比我们不难发现,以上的列举方法,无非有两类:

      ①. 通过在浮动元素的末尾添加一个空元素,设置clear:both 属性,:after伪元素其实也是通过content 在元素的后面生成了内容为一个点的块级元素;

      ②. 通过设置父元素 overflow 或者display:table 属性来闭合浮动

      推荐直接使用方式7伪元素的方法闭合浮动

    引用:

      1. 那些年我们一起清除过的浮动:http://www.iyunlu.com/demo/enclosing-float-and-clearing-float/index.html

      
  • 相关阅读:
    开发中几个时期该写的
    Java API Docs
    Cogs 1709. [SPOJ705]不同的子串 后缀数组
    Poj 3683-Priest John's Busiest Day 2-sat,拓扑排序
    Bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 动态规划
    Bzoj 1856: [Scoi2010]字符串 卡特兰数,乘法逆元,组合数,数论
    Bzoj 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路 最短路,floyd
    Bzoj 1042: [HAOI2008]硬币购物 容斥原理,动态规划,背包dp
    Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜
    Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
  • 原文地址:https://www.cnblogs.com/oulae/p/11143405.html
Copyright © 2020-2023  润新知