• 分析CSS布局中BFC


    1、什么是BFC

    BFC(Block Formatting Context,块级元素格式化上下文)是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。

    通俗讲,BFC就是一种布局方式,在创建了 BFC后,其子元素会一个接一个地放置:盒子们自所在的 containing block 顶部起,水平方向上一个接一个撑满整个宽度,垂

    直方向上他们的起点是包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性。在 同一个BFC中,两个元素才有可能发生垂直Margin的重叠,这个包括相邻

    元素,嵌套元素,只要他们之间没有间隔(即父元素的边框,非空内容,padding等)就会发生margin重叠,即margin会发生重合。更重要的是:创建BFC,能消除元素对相邻

    元素的布局影响,常见的应用 是:使用overflow:hidden创建BFC ,来清除浮动元素对后面元素的布局影响 。


    2、如何创建BFC

    当一个HTML元素满足下面条件的任何一点,都可以产生BFC:

    float的值不为”none” (如:float:left/right)

    overflow的值不为”visible”(如:overflow:hidden)

    display的值为 “table-cell”, “table-caption”, or “inline-block”中的任何一个

    position的值不为 “static” 或 “relative”中的任何一个(如:position:absolute)


    3、BFC的作用

    1.不和浮动元素重叠

    如果一个浮动元素后面跟着一个非浮动的元素,那么就会产生一个覆盖的现象,很多自适应的两栏布局就是这么做的。比如下图的效果,参考例子:

    <style>
    *{margin: 0;padding: 0;}
    .userinfo{width: 200px;height: 200px;color: #fff;overflow: hidden;padding: 10px;_zoom:1;}
    .userinfo a{width: 80px;height: 80px;background-color: #080;float: left;margin-right: 5px;}
    .userinfo .txt{overflow: hidden;line-height: 20px;padding: 0 5px;*zoom: 1;}/* overflow: hidden;触发bfc;zoom: 1;触发ie的haslayout以达到同bfc一样的显示效果 */
    </style>
    <div>
    <a href="#"><img src="" alt="用户头像" /></a>
    <div>
    <p>您好, <b>xxxx</b></p>
    <p>一段文字描述!一段文字描述!一段文字描述!一段文字描述!</p>
    </div>
    </div>

    2.清除元素内部浮动

    只要把父元素设为BFC就可以清理子元素的浮动了,最常见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就可以了(IE Haslayout)。

    3.嵌套元素Margin边距折叠问题的解决

    按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如没有边框,非空内容,

    padding等)就会发生margin重叠。

    因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠了。

  • 相关阅读:
    C++test 关于resource参数和include/exclude参数说明
    开发程序 ip 127.0.0.0 0.0.0.0原理与区别
    安装rails旧版本出错bin_path': can't find gem railties (["3.0.5"]) with executable rails (Gem::GemNotFoundException)
    rails excel的创建
    ruby nil? empty? blank? 的区别
    rails 调试工具pry 换掉debugger 和 rails c
    rails respond_to 的原理与使用
    rails transaction 的用法
    ssh的传送文件命令
    出现了pid的错误A server is already running. 和如何改变webrick的端口值
  • 原文地址:https://www.cnblogs.com/liaojie970/p/7049744.html
Copyright © 2020-2023  润新知