zoukankan      html  css  js  c++  java
  • bfc

    作者:zccst

    概念:

    BFC,在进行盒模型时,提供了一个环境,在这个环境中按照一定规则进行布局不会影响到其他环境中的布局。

    也就是说,如果一个元素符号了成为BFC的条件,该元素内部元素的布局和定位就和外部元素互不影响,是一个隔离了的独立容器。

    在CSS3中,BFC叫FLOW ROOT。

    形成BFC条件:

    1,float不为none

    2,overflow不为visible

    3,display的值为table-cell, table-caption , inline-block之一

    4,position的值不为 static 或 relative中的任何一个

    常见作用

    1,包含浮动元素

    对父元素使用overflow:hidden/auto/scroll, float:left/right, display:inline-block可以闭合浮动。

    使用display:table可以隐式触发table-cell/table-caption,来创建bfc

    例子,使用overflow:hidden避免了外部div的高度塌陷,否则内部浮动元素脱离文档流,外部div相当于一个空标签,没有高度和宽度,上下边框重叠在一起。

    注:IE6/7需要触发hasLayout闭合浮动

    2,不被浮动元素覆盖

    即float:left和display:inline-block可以在同一行,互相不重叠。

    3,阻止父子元素的margin合并

    详见另一个文章。简言之:

    <div style="margin-top:20px"><div style="margin-top:20px"></div></div>  //会合并,父级元素不是BFC

    <div style="margin-top:20px;overflow:auto"><div style="margin-top:20px"></div></div>  //不会合并,父级元素是BFC

    注:ie6/7需要触发hasLayout。

    我们知道在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

    在IE6/7使用hasLayout

    .floatfix{//IE6-7

    *zoom:1;

    }

    .floatfix:after{//IE8及以上

    content:"";

    display:table;

    clear:both;

    }

    结论:两种办法

    1,利用clear清除浮动

    2,使父容器形成BFC

  • 相关阅读:
    创建文件并写入内容
    java自动压缩文件并加密
    Java自动发送带图片邮件(带附件)
    eclipse正则表达式搜索
    解决:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    spring整合mybatis(原始dao和mapper代理两种方式)
    (解决)mysql1366中文显示错误的终极解决方案
    pdf合并、拆分工具
    ScheduledExecutorService定时方法
    json数据包含特殊字符解析失败
  • 原文地址:https://www.cnblogs.com/zccst/p/3681346.html
Copyright © 2011-2022 走看看