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

    1. 理解clear:left/right的含义
    2. 为什么要清除浮动
    3. 清除浮动的方法

    1、理解clear:left/right的含义

     clear语法:

    clear:none | left | right | both

    取值:

    none:默认值。允许两边都可以有浮动对象

    left:不允许左边有浮动对象

    right:不允许右边 有浮动对象

    both:不允许有浮动对象。

    w3.org官方的解释是:「元素盒子的边不能和前面的浮动元素相邻」。

    务必记住这句话:“float是魔鬼,会影响其他相邻元素;但是clear是小白,其只会影响自身,不会对其他相邻元素造成影响!

    <div class="fz">
       <div class="fix"> /*该fix可以不引用,因为img是左浮动,cll已经清除了左浮动。但如果img是右浮动,父div同样塌陷*/
           <img src="images/xxx.jpg" width="125" class="l pr10">
           <div class="cll">我不喜欢你,我不要和你在一起~</div>
       </div>
    </div>

     

    这样,解释了垂直环绕布局,第一个div左浮动,第二个div先左浮动,后清除左浮动,第三个div不浮动。

    其中第二个div先左浮动对第三个div产生影响,再清除左浮动是自己左边抗浮动(即左边不能有浮动)

    2、为什么要清除浮动?

    a、防止父元素高度塌陷

    当一个父元素的高度不写或者为auto的时候,里面含有浮动子元素,那么该父元素的高度将不会自动适应子元素的高度,当子元素全部为浮动元素则父元素的高度为0;当子元素有未浮动元素,则父元素的高度为该未浮动元素的高度。

    b、塌陷影响其(父元素)相邻元素的布局

    代码:

    <div class="fz">
        <div style=" 300px; border: 3px solid #ff4136;">
            <div class="l" style=" 100px; height: 100px; border: 1px solid #ccc;">左浮动</div>
            <div class="r" style=" 100px; height: 100px; border: 1px solid #ccc;">右浮动</div>
        </div>
        <div>父元素相邻元素</div>
    </div>

    (父元素的高度为0,并使得父元素相邻元素跑上面去了。)

    清除浮动后:

    3、清除浮动的方法:

    方法一:在浮动元素末尾添加一个空的标签

    <div style="clear:both"></div>
    <br clear="all" />

    缺点:添加无意义的空标签,有违结构的表现和分离。不推荐使用

    方法二:父元素添加"ovh"或者"ova"

    .ovh { overflow: hidden; }
    .ova { overflow: auto; }

    在IE6/7中还需要触发hasLayout,例如*zoom:1 ? 不需要,因为overflow:hidden跟auto已经触发了ie6/7的haslayout,此外父元素设置了width宽度也已经触发了haslayout,详见 《BFC和haslyout(IE6-7)》

    缺点:ovh内容增多时候容易造成不会自动换行导致内容被隐藏,无法显示需要溢出的元素;?很多js特效做不了,多出去部分被隐藏了?

    ova子元素宽度改变时导致父元素出现滚动条。

    方法三:父元素也设置浮动

    缺点:使得父元素相邻的元素的布局会受到影响,不可能一直浮动到body,不推荐使用

    方法四:父元素设置display:table

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

    方法五:使用after伪元素,推荐使用

    .fix { *zoom: 1; }    //由于IE6-7不支持:after使用*zoom:1触发haslayout
    .fix:after { display: table; content: ''; clear: both; }

    综上所述,清除浮动的两种思路大体是:

    a、清除浮动:利用 clear 属性,包括在浮动元素末尾添加一个带有 clear: both 属性的空 div 来闭合元素,其实利用 :after 伪元素的方法也是在元素末尾添加一个内容为一个点并带有 clear: both 属性的元素实现的。

    b、闭合浮动:触发浮动元素父元素的 BFC (Block Formatting Contexts, 块级格式化上下文),使到该父元素可以包含浮动元素。

    推荐使用方法五,当确定不需考虑溢出问题的时候可以考虑父元素添加”ovh“,以及父元素使用"display: inline-block;"都是触发父容器形成BFC的原理。

  • 相关阅读:
    6大集合类
    数据导出到Excel/Word 防止出现乱码仅有一行数据导出的时候
    bootmgr is compressed 解决办法 汇总
    RAID 独立磁盘真阵列
    C# 和 Js 取出时间间隔
    Image 获取缩略图
    ConvertJSONDateToJSDateObject 方法实现json格式时间串转换为 对应的时间格式串
    纯js脚本的模式对话框
    癌症的IARC分级
    微信小程序如何在页面间传值
  • 原文地址:https://www.cnblogs.com/zhaojieln/p/4221504.html
Copyright © 2011-2022 走看看