块级格式化上下文BFC

BFC:Block Formatting Context,块级格式化上下文,可以理解为BFC是块级作用域

元素定位方案

标准文档流

块级元素按出现顺序从上至下垂直排列

行内元素按照水平排列,直到当行被占满,然后换行。块级元素则会被渲染成为一个完整的新行

所有元素默认都是普通流定位

浮动

元素先按照标准流的方式出现,然后根据浮动向左边或者向右边发生偏移。

 

绝对定位方案

元素整体脱离标准流,所以决定定位元素不会对其他兄弟元素造成影响

BFC作用于标准流定位,BFC可以看作是一块渲染区域,有着自己的渲染规则,这块渲染区域是隔离于外界的独立容器,容器里的元素在布局上不会影响到容器外面的元素。

BFC规则

  • 属于同一个 BFC 的两个相邻 Box 垂直排列
  • 属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠
  • BFC 中子元素的 margin box 的左边, 与包含块 (BFC) border box的左边相接触 (子元素 absolute 除外)
  • BFC 的区域不会与 float 的元素区域重叠
  • 计算 BFC 的高度时,浮动子元素也参与计算
  • 文字层不会被浮动层覆盖,环绕于周围

如何添加BFC

根元素:<html>

浮动元素:元素的float属性不可以是none

绝对定位元素:position为absolute或者fixed

display属性是:inline-block、table-cell、table-caption、table、table-row、table-row-grounp、table-header-grounp、table-footer-grounp、inline-table、flow-root、flex、inline-flex、grid、inline-grid

overflow值不为visible的元素

content值为layout、content、paint、

多列元素(元素的column-count或column-width不为auto,包括column-count为1)

块级格式化上下文BFC

这是最常用的几种方法,图片来自B站技术蛋老师     

BFC作用

1.避免外边距塌陷

外边距塌陷示例

        .cube {
            width: 100px;
            height: 100px;
            border-radius: 10px;
            background-color: blue;
            margin: 100px;
        }
------------------------------------------------
    <div class="cube"></div>
    <div class="cube"></div>

 

块级格式化上下文BFC

 

 

 

 

使用container包裹两个cube创建BFC避免外边距塌陷

 

        .cube {
            width: 100px;
            height: 100px;
            border-radius: 10px;
            background-color: blue;
            margin: 100px;
        }

        .container {
            overflow: hidden;
        }
----------------------------------------------------------
    <div class="container">
        <div class="cube"></div>
    </div>
    <div class="container">
        <div class="cube"></div>
    </div>

 

块级格式化上下文BFC

 

2.清除浮动

 没有清除浮动的示例

为子元素添加了浮动,子元素脱离标准流使得父元素没有内容,发生高度塌陷。

        .cube {
            width: 100px;
            height: 100px;
            border-radius: 10px;
            background-color: blue;
            float: left;
        }

        .container {
            border: 10px solid red;
        }
 
    <div class="container">
        <div class="cube"></div>
    </div>

 

块级格式化上下文BFC

使用overflow为父亲元素添加BFC

        .cube {
            width: 100px;
            height: 100px;
            border-radius: 10px;
            background-color: blue;
            float: left;
        }

        .container {
            border: 10px solid red;
            overflow: hidden;
        }
----------------------------------------------------
    <div class="container">
        <div class="cube"></div>
    </div>

块级格式化上下文BFC

 

3.阻止元素被浮动元素覆盖

 浮动元素脱离标准流,下一个元素会占用浮动元素原本的位置,从而被浮动的元素覆盖

        .floatDiv {
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
        }

        .normalDiv {
            width: 200px;
            height: 200px;
            background-color: blue;
        }
 -------------------------------------------------------------
    <div class="floatDiv"></div>
    <div class="normalDiv"></div>

 

块级格式化上下文BFC

为没有浮动的元素添加overflow-hidden

        .floatDiv {
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
        }

        .normalDiv {
            width: 200px;
            height: 200px;
            background-color: blue;
            overflow: hidden;
        }
----------------------------------------------------------------
    <div class="floatDiv"></div>
    <div class="normalDiv"></div>

块级格式化上下文BFC

上一篇:关于CSS的浮动笔记


下一篇:Launcher初步学习