zoukankan      html  css  js  c++  java
  • 什么是BFC?


    MDN:

    块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。


    个人理解:

    BFC就是一个封闭的盒子,盒子内部无论怎么折腾都不会影响到外部。


    情况下会产生BFC?

    ​ 下列方式会创建块格式化上下文

    • 根元素(``)

    • 浮动元素(元素的 float 不是 none

    • 绝对定位元素(元素的 positionabsolutefixed

    • 行内块元素(元素的 displayinline-block

    • 表格单元格(元素的 displaytable-cell,HTML表格单元格默认为该值)

    • 表格标题(元素的 displaytable-caption,HTML表格标题默认为该值)

    • 匿名表格单元格元素(元素的 displaytable、``table-rowtable-row-group、``table-header-group、``table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或 inline-table

    • overflow 值不为 visible 的块元素

    • display 值为 flow-root 的元素

    • contain 值为 layoutcontent或 paint 的元素

    • 弹性元素(displayflexinline-flex元素的直接子元素)

    • 网格元素(displaygridinline-grid 元素的直接子元素)

    • 多列容器(元素的 column-countcolumn-width 不为 auto,包括 ``column-count1

    • column-spanall 的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中(标准变更Chrome bug)。


    BFC布局规则特性

    • 内部盒子会在垂直方向,一个接一个排列
    • 同属一个BFC的两个相邻盒子的margin会发生重叠
    • 每个盒子(块盒与行盒)的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
    • 计算高度时,浮动或者定位的元素也会参与计算。
    • 不会影响到外面元素

    BFC的作用


    1.实现右侧栏盒子自适应

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .left {
                float: left;
                height: 300px;
                 200px;
                background-color: red;
            }
    
            .right {
                overflow: hidden;
                height: 500px;
                 100%;
                background-color: aqua;
            }
        </style>
    </head>
    
    <body>
        <div class="left"></div>
        <div class="right"></div>
    </body>
    
    </html>
    

    页面渲染如图:

    8hqK3j.png


    2.解决外边距合并问题

    ​ 同属一个BFC的两个相邻盒子的margin会发生重叠

    8hqzq0.png

    创建不属于同一个BFC,就不会发生margin重叠了。

    8hLISJ.png


    3.清除浮动

    当父盒子没有设置高度,子盒子浮动,就会发现高度崩塌的问题

    8hXiv9.png

    父元素设为BFC

    利用的就是BFC计算高度时,浮动或者定位的元素也会参与计算。

    8hXd2Q.png


    总结


    BFC就是页面上一个隔离的独立的容器。容器里面的子元素不会在布局上影响到外面的元素。反之也是如此。例如外边距合并,浮动。

  • 相关阅读:
    XNA之3D文字
    SQL2005调用C#编写的DLL
    C#绘图工具之Rotate
    ASP.NET中的WebService
    数据库同步之复制技术
    C#之TCP消息的发送和接受
    Tsql清空表数据的两种方式truncate and delete
    Code First Migrations数据迁移方法
    MSSQLSERVER跨服务器连接
    windows下wget命令行下载工具的使用
  • 原文地址:https://www.cnblogs.com/lenghaha/p/12577582.html
Copyright © 2011-2022 走看看