CSS中的BFC是什么?

简介: CSS中的BFC是什么?

前言


我们在页面布局的时候,经常出现以下情况:


这个元素高度怎么没了?
这两栏布局怎么没法自适应?
这两个元素的间距怎么有点奇怪的样子?
......
原因是元素之间相互的影响,导致了意料之外的情况,这里就涉及到BFC概念


一、BFC是什么?


BFC(Block Formatting Context),即块级格式化上下文,它是页面中的一块渲染区域,并且有一套属于自己的渲染规则:


1、内部的盒子会在垂直方向上一个接一个的放置

2、对于同一个BFC的俩个相邻的盒子的margin会发生重叠,与方向无关。

3、每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此

4、BFC的区域不会与float的元素区域重叠

5、计算BFC的高度时,浮动子元素也参与计算

6、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然


BFC目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素


二、如何开启BFC


触发BFC的条件包含不限于:


1、根元素,即HTML元素

2、浮动元素:float值为left、right

3、overflow值不为 visible,为 auto、scroll、hidden

4、display的值为inline-block、inltable-cell、table-caption、table、inline-table、flex、inline-flex、grid、inline-grid

5、position的值为absolute或fixed


三、常见应用场景


防止margin重叠(塌陷)


<style>
    p {
        color: #f55;
        background: #fcc;
        width: 200px;
        line-height: 100px;
        text-align:center;
        margin: 100px;
    }
</style>
<body>
    <p>Haha</p >
    <p>Hehe</p >
</body>


会造成如下结果,导致外边距重叠:

e9c3c2d5d0364bc806b6c3663c46256d_c293538d25e04d4f9e32626c9131bc82.png


解决方法,给其中一个盒子开启BFC:


<style>
    .wrap {
        overflow: hidden;// 新的BFC
    }
    p {
        color: #f55;
        background: #fcc;
        width: 200px;
        line-height: 100px;
        text-align:center;
        margin: 100px;
    }
</style>
<body>
    <p>Haha</p >
    <!-- 这时的两个盒子就不是一个BFC了,就不会相互影响 -->
    <div class="wrap">
        <p>Hehe</p >
    </div>
</body>

d02c81d1325011d272fedeb405cc6298_3e0cdf39b64a4fe78b3afe19a9428a69.png


给这个容器生成一个BFC,那么两个p就不属于同一个BFC,则不会出现margin重叠


清除内部浮动


<style>
    .par {
        border: 5px solid #fcc;
        width: 300px;
    }
    .child {
        border: 5px solid #f66;
        width:100px;
        height: 100px;
        float: left;
    }
</style>
<body>
    <div class="par">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>


由于子元素浮动导致文档流的改变,使父元素造成高度塌陷

6a7736422f12ba954d100d269dd13f50_170484523eeb48cda0072ac28b515bc8.png

给父元素开启BFC,如下:


.par {
    overflow: hidden;
        border: 5px solid #fcc;
        width: 300px;
    }
    .child {
        border: 5px solid #f66;
        width:100px;
        height: 100px;
        float: left;
    }
</style>
<body>
    <div class="par">
        <div class="child"></div>
        <div class="child"></div>
    </div>
</body>


3da98156c7899b05f539ee19ea793b64_9d0ca8d935cc47e582910e9199b2157f.png


总结


以上能够完整的体现了BFC实际就是页面一个独立的容器,里面的子元素不影响外面的元素。


目录
相关文章
|
2月前
|
前端开发 容器
CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
【4月更文挑战第2天】 CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
30 10
|
2月前
|
前端开发 容器
CSS 中BFC是什么?
CSS 中BFC是什么?
47 1
|
2月前
|
前端开发 容器
CSS BFC是什么,应用实例
CSS BFC是什么,应用实例
34 0
|
9月前
|
前端开发 容器
前端CSS理解 —— BFC(块级格式化上下文)
前端CSS理解 —— BFC(块级格式化上下文)
43 0
|
12月前
|
前端开发 容器
CSS:BFC(Block Formatting Context 块级格式化上下文)
CSS:BFC(Block Formatting Context 块级格式化上下文)
57 0
|
前端开发 容器
CSS实战笔记(九) BFC
CSS实战笔记(九) BFC
83 0
CSS实战笔记(九) BFC
|
前端开发
【CSS】有意思的BFC:Block Formatting Context(块格式化上下文)!🤡
前言 大家好,我是HoMeTown,今天想聊一聊CSS中的BFC,很多朋友应该都听过这个名词,搞懂BFC可以让我们理解CSS中一些很诡异的地方,话不多说,直奔主题!
42 0
|
前端开发 容器
详细说说CSS中的BFC概念
详细说说CSS中的BFC概念
66 0
详细说说CSS中的BFC概念
|
Web App开发 移动开发 前端开发
css的这些内容你可能知道,但是又不完全知道(二)(BFC解决一些问题的本质)
css的这些内容你可能知道,但是又不完全知道(二)(BFC解决一些问题的本质)