美文网首页
CSS中的BFC

CSS中的BFC

作者: beatzcs | 来源:发表于2019-09-14 10:45 被阅读0次

    BFC定义

    BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域,或者说是一个隔离的独立容器。

    BFC的形成条件

    • 浮动元素,float 除 none 以外的值;
    • 定位元素,position(absolute,fixed);
    • display 为以下其中之一的值 inline-block,table-cell,table-caption;
    • overflow 除了 visible 以外的值(hidden,auto,scroll);

    BFC的特性

    • 内部的Box会在垂直方向上一个接一个的放置。
    • 垂直方向上的距离由margin决定
    • bfc的区域不会与float的元素区域重叠。
    • 计算bfc的高度时,浮动元素也参与计算
    • bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

    特性分析

    1、BFC中的盒子对齐

    <div class="container">
      <div class="box1"></div>
      <div class="box2"></div>
      <div class="box3"></div>
    </div>
    
    .container {
        position: absolute;  /* 创建一个BFC环境*/
        height: auto;
        background-color: #eee;
    }
    

    内部的Box会在垂直方向上一个接一个的放置。

    2、外边距折叠
    在常规文档流中,两个兄弟盒子之间的垂直距离是由他们的外边距所决定的,但不是他们的两个外边距之和,而是以较大的为准。那么怎么让垂直外边距不折叠呢?

    bfc就是页面上的一个独立容器,容器里面的子元素不会影响外面元素,同样外面的元素不会影响到BFC内的元素。所以就让兄弟盒子中的任一个处于另一个BFC中就行了。

    <div class="container">
        <div class="wrapper">
            <div class="box1"></div>
        </div>
        <div class="box2"></div>
    </div>
    
    .wrapper {
        overflow: hidden;  /* 创建一个BFC环境*/
    }
    

    3、不被浮动元素覆盖
    浮动的盒子会遮盖下面的盒子,但是下面盒子里的文字是不会被遮盖的,文字反而还会环绕浮动的盒子。这也是一个比较有趣的特性。可以用BFC来防止字体环绕。

    .left {
        float: left;
        width: 100px;
        height: 100px;
        background-color: yellow;
    }
    
    p {
        background-color: green;
        /* overflow: hidden; */
    }
    
    字体环绕.png

    4、BFC 可以包含浮动的元素(清除浮动)
    正常情况下,浮动的元素会脱离普通文档流,使父元素高度坍塌。即外层的div会无法包含内部浮动的div。
    但如果我们触发外部容器的BFC,根据BFC规范中的第4条:计算BFC的高度时,浮动元素也参与计算,那么外部div容器就可以包裹着浮动元素。

    更多文章:
    CSS深入理解流体特性和BFC特性下多栏自适应布局
    CSS中的BFC详解

    相关文章

      网友评论

          本文标题:CSS中的BFC

          本文链接:https://www.haomeiwen.com/subject/zshsyctx.html