zoukankan      html  css  js  c++  java
  • 关于css清除元素浮动的方法总结(overflow clear floatfix)

    在前两天的一个面试中考官问我web中清除浮动的一些css常用方法,我很轻松的答出了:

    1.overflow:hidden

    2.clear:both

    3.floatfix类

    然后问题就来了,考官接着问'为什么overflow:hidden'可以清除浮动?这下就把我问住了。写了这么多年css只是单纯的解决问题,但是从来没想过为什么。

    看来是需要反省和认真总结一下以前的这些细节问题了,只要不明白的就要加一个'为什么?'

    clear:both

    这三种方法里最好理解的就是clear:both 

        <style>
            #con{border: 2px dashed #ccc;padding:5px;}
            div.c{width: 100px;height: 100px;background-color: green;margin-right:5px; _display: inline; float: left;color: #fff;}
        </style>
        <div id="con">
            <div class="c">内容一</div>
            <div class="c">内容二</div>
            <div class="c">内容三</div>
            <div style="clear:both"></div>
        </div>    

    原理就是在父元素最后面添加一个非浮动的空div由于有clear:both属性用来清除浮动,父元素会把它包围起来,顺带手把float:left的div也一起包裹起来,高度不再塌陷。

    这种方法不再流行的主要原因就是改变了结构添加了无用的内容。

    overflow:hidden

    写这篇文章的起因就是它overflow:hidden,到底为什么加入这个属性就可以清除浮动呢?我上网查了一下,文章还是挺多的'block format content'下面简称BFC,相关文章可以自己搜一下挺多的。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title></title>
            <style>
            #con{border: 2px dashed #ccc;padding:5px;overflow: hidden;}
            #con div.c{width: 100px;height: 100px;background-color: green;margin-right:5px; _display: inline; float: left;color: #fff;}
        </style>
    </head>
    <body>
    
        <div id="con">
            <div class="c">内容一</div>
            <div class="c">内容二</div>
            <div class="c">内容三</div>
        </div>    
    </body>
    </html>

    添加这个属性就使父级容器形成了BFC,它有三个特性:

    1.BFC会阻止垂直外边距(margin-top、margin-bottom)折叠

    2.BFC不会重叠浮动元素

    3.BFC可以包含浮动

    父级形成了BFC之后说'清除浮动'有点不太恰当,应该改为'包含浮动'。形成BFC的一些方法:

    • float为 left|right
    • overflow为 hidden|auto|scroll
    • display为 table-cell|table-caption|inline-block
    • position为 absolute|fixed

    当然父级BFC也不是一个很好的解决方法,比如:

    1.父级设置float:left会改变宽度,父级也会悬浮

    2.父级设置overflow:hidden会影响绝对定位的定位的子元素显示问题

    3.ie6兼容性

    .floatfix

    最后说现在大家都在用的floatfix类

    .floatfix{*zoom:1;}
    .floatfix:after{content:"";display:table;clear:both;}

    .floatfix:after挺好理解的,就是在元素后面添加一个清除浮动的元素等同于<div style="clear:both"></div>,只不过这是用css来添加的。

    但是IE6、7不支持a以外的伪类,所以我们再用*zoom:1用来兼容IE6、7。

    在IE6、7内有个hasLayout的概念,很多bug都是由hasLayout导致的,当元素的hasLayout属性值为false的时候,元素的尺寸和位置由最近拥有布局的祖先元素控制。当元素的hasLayout属性值为true的时候会达到和BFC类似的效果,元素负责本身及其子元素的尺寸设置和定位。我们可以利用这点儿在IE6、7下完成清浮动,先看看怎么使元素hasLayout为true

    • position: absolute 
    • float: left|right
    • display: inline-block
    • width: 除 “auto” 外的任意值
    • height: 除 “auto” 外的任意值
    • zoom: 除 “normal” 外的任意值
    • writing-mode: tb-rl

    在IE7中使用overflow: hidden|scroll|auto 也可以使hasLayout为true

    最后总结

    现在我们已经知道父级div什么情况可以形成BFC,ie6、7的hasLayout属性值什么时候可以形成true,那么在项目的不同应用中就可以使用不同的方法来清除浮动了。

  • 相关阅读:
    【技术贴】每次打开excel表格都会弹出新excel。book1.xls解决方法
    【技术贴】鼠标右键盘符属性报错Volume filter WMI not found的解决办法
    解决QQ聊天QQ秀咒语为什么我不能施放咒语/看不到咒语效果?
    【java】servlet输出pdf文件到浏览器 教程
    C#抽象工厂模式的几种实现方法及比较(外摘)
    SQL 语句汇总With子句
    浅析.NET开发中代理模式的使用(外摘)
    使用设计模式构建通用数据库访问类(外摘)
    Cognos产品组件及各组件功能介绍
    游标Oracle游标汇总
  • 原文地址:https://www.cnblogs.com/dtdxrk/p/3555438.html
Copyright © 2011-2022 走看看