CSS 中的 BFC 是什么?

简介: 大家好,我是前端西瓜哥。今天来学习 BFC。BFC,为 Block Formatting Context 的缩写,中文翻译为 块格式上下文。BFC 是 Web 页面 CSS 渲染的一个机制,是块级盒子布局中产生的区域。你可以将一个 BFC 可以理解为一个容器,里面的元素不会影响到容器外的布局。

大家好,我是前端西瓜哥。今天来学习 BFC。

BFC,为 Block Formatting Context 的缩写,中文翻译为 块格式上下文

BFC 是 Web 页面 CSS 渲染的一个机制,是块级盒子布局中产生的区域。

你可以将一个 BFC 可以理解为一个容器,里面的元素不会影响到容器外的布局

怎样的元素属于 BFC?

  • 根元素,也就是 HTML 元素
  • 浮动元素,即使用了 float 属性且值不为 none
  • 绝对定位元素
  • 块级容器(如 display 的值为 inline-blocks、table-cells、table-captions)
  • overflow 的值不为 visible 的元素
  • 使用了 display: flow-root 的元素。这是新出的值,专门用来创建无副作用的 BFC。兼容性存疑,比较少用。

当然还有一些 CSS 属性也可以触发 BFC,但比较少见,这里就不一一列举了,读者可自行阅读 MDN 文档。

目前来说,最常见的是通过 overflow: hidden 来构建 BFC。一般情况下,它的副作用最小。但如果元素下有超出盒子范围的内容,会被截掉,请谨慎使用。

BFC 的特性

BFC 主要有两个特性,我们来学习一下。

特性1:上下外边距重叠

同一个 BFC 下的两个相邻块级元素,会发生上下方向的 margin 重叠

比如前一个 div 设置了 margin-bottom: 20px,下一个 div 设置了 margin-top: 10px,然后你会发现它们的上下距离其实是 20px(二者的最大值),而不是 30px(二者之和)。

<style>
  .box {
    width: 100px;
    height: 100px;
  }
  .b1 {
    background-color: bisque;
    margin-bottom: 20px;
  }
  .b2 {
    background-color: blueviolet;
    margin-top: 10px;
  }
</style>
<div class="box b1"></div>
<div class="box b2"></div>

如果想避免这种情况,可以给这两个 div 裹上一个 BFC。

<style>
  .container {
    overflow: hidden;
  }
  /* ... */
</style>
<div class="container">
  <div class="box b1"></div>
</div>
<div class="container">
  <div class="box b2"></div>
</div>

image.png

因为 overflow: hidden 有副作用,所以在实际开发中,我更喜欢用 padding 来替代 margin。

特性 2:浮动元素也会参与计算高度

浮动,是非常奇怪的一种效果。效果类似 word 的文字环绕排版,可以让文字和内联样式环绕着它。

当一个元素被赋予浮动效果后,它会脱落正常文档流,向左或向右平移到所在容器的边框(border)位置,或者碰到另一个浮动元素为止。

浮动元素脱离了正常文档流,一般情况下,计算容器元素的高度时,是不考虑浮动元素高度的。

BFC 可以强行让浮动元素参与计算

<style>
  .container {
    /* overflow: hidden; */
    padding: 5px;
    border: 1px solid #000;
  }
  .box {
    float: left;
    width: 100px;
    height: 100px;
    background-color: cornflowerblue;
  }
</style>
<div class="container">
  <div class="box"></div>
</div>

上面的这种写法,没有给 container 应用 BFC,会导致容器元素高度塌陷,效果见下图左边。

当我们将 overflow: hidden 的注释去除,容器元素就应用了 BFC,就能得到我们想要的容器元素根据子元素自动撑高的效果了。效果见下图右边。

image.png

结尾

BFC 主要掌握它的两个特性就好了:

  • 上下外边距重叠
  • 浮动元素参与 BFC 高度计算
相关文章
|
前端开发 容器
CSS 中BFC是什么?
CSS 中BFC是什么?
242 1
|
前端开发 容器
css【详解】—— BFC 和 IFC
css【详解】—— BFC 和 IFC
153 1
|
前端开发 容器
CSS:BFC(Block Formatting Context 块级格式化上下文)
CSS:BFC(Block Formatting Context 块级格式化上下文)
198 0
|
前端开发 容器
CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
【4月更文挑战第2天】 CSS面试考点:隐藏元素、BFC、垂直居中、CSS3新特性
140 10
|
前端开发 容器
CSS BFC是什么,应用实例
CSS BFC是什么,应用实例
95 0
|
前端开发 容器
前端CSS理解 —— BFC(块级格式化上下文)
前端CSS理解 —— BFC(块级格式化上下文)
158 0
|
前端开发 容器
CSS实战笔记(九) BFC
CSS实战笔记(九) BFC
157 0
CSS实战笔记(九) BFC
|
前端开发 容器
CSS中的BFC是什么?
CSS中的BFC是什么?
195 0
|
前端开发
【CSS】有意思的BFC:Block Formatting Context(块格式化上下文)!🤡
前言 大家好,我是HoMeTown,今天想聊一聊CSS中的BFC,很多朋友应该都听过这个名词,搞懂BFC可以让我们理解CSS中一些很诡异的地方,话不多说,直奔主题!
102 0
|
前端开发 容器
详细说说CSS中的BFC概念
详细说说CSS中的BFC概念
129 0
详细说说CSS中的BFC概念

热门文章

最新文章

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