zoukankan      html  css  js  c++  java
  • BFC的深入理解

    一:BFC是什么东东

      了解BFC前先一了解一下Box和Formatting Context

      (1)B: BOX即盒子,页面的基本构成元素。分为 inline 、 block 和 run-in 三种类型的BOX

      (2)FC: Formatting Context是W3C的规范中的一种概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

            常见的 Formatting Context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)

      BFC 定义

        BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

      BFC布局规则:

    1. 内部的Box会在垂直方向,一个接一个地放置。

    2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠

    3. 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

    4. BFC的区域不会与float box重叠。

    5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。

    6. 计算BFC的高度时,浮动元素也参与计算

    二:那些元素会生成BFC

    1. 根元素
    2. float属性不为none
    3. position为absolute或fixed
    4. display为inline-block, table-cell, table-caption, flex, inline-flex
    5. overflow不为visible

    三:BFC的作用及原理

      1.自适应两栏布局:

      

      布局规则第3条:每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

      因此,即使存在浮动的aside,main的左边依然会与包含块的左边相接触。

      布局规则第4条:BFC的区域不会与float box重叠。

      我们可以通过通过触发main生成BFC, 来实现自适应两栏布局。  

    .main{
        overflow: hidden;
    }

      

      2.清除内部浮动:

      布局规则第6条:计算BFC的高度时,浮动元素也参与计算

      

      给 par 添加属性: overflow:hidden;则会使 par 生成 BFC,其内部的 child 则会参与高度计算。

      3.防止处置 margin 重叠

      布局规则第2条:Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠

      

      HaHa 和 HeHe margin 上下发生了重叠。

      解决方案:给 HeHe 外层套一个 BFC 的 BOX就OK了:

      

      

  • 相关阅读:
    新人,请多指教,有个java小问题: bety a=300,强制类型转换,分析我的做法是否正确?谢谢
    生活健康
    小涛涛
    学习笔记(三)
    学习笔记(二)
    学习笔记(一)
    子元素宽度为100%,缩小窗口,父元素出现横向滚动条,滚动条向右拉,父元素右边有一块空白区域,没有背景颜色
    word-wrap:break-word和word-break:break-all的区别
    链接link使用href=“#”和href="##"的区别
    C#中在路径前使用 @ 的作用
  • 原文地址:https://www.cnblogs.com/xinxingyu/p/5687907.html
Copyright © 2011-2022 走看看