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实际就是页面一个独立的容器,里面的子元素不影响外面的元素。


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

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    519
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    403
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    397
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    259
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    513
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    685
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1224
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    276
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    1021
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    476