CSS BFC 问题总结

224 阅读2分钟

一、什么是BFC?

BFC,全称 Block Formatting Context,翻译成块级格式化上下文,它就是一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。

二、BFC的生成

  1. 浮动元素

  2. 绝对定位元素

  3. overflow 值不为 visible 的块级盒子

  4. 当然,root 元素会自动生成一个BFC,这个应该很好理解,毕竟需要一个根BFC来布局

三、BFC环境下的执行规则

  1. 在一个块级排版上下文中,盒子是从包含块顶部开始,垂直的一个接一个的排列的。每个盒子的左外边是触碰到包含块的左边的(对于从右向左的排版,则相反)

  2. 相邻两个盒子之间的垂直的间距是被 margin 属性所决定的,在一个块级排版上下文中相邻的两个块级盒之间的垂直 margin 是折叠的。从而导致了经典的外边距折叠问题,而发生折叠的主要原因是因为他们两个块级盒子在同一个BFC的环境下,解决办法是让他们俩个不在同一个BFC就ok啦

  3. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素

经典浮动元素的塌陷问题:一个元素中的子元素浮动了,这个父元素就会发生高度塌陷问题

下例中一旦内部的红色盒子浮动,蓝色盒子就无法被撑起,高度会变成0。原因就是因为浮动元素创建了一个新的BFC,红色盒子成为了一个独立的容器,不会影响到外面的父元素了。它的定位规则不再受制于这个父元素了。只要在在父元素加上overflow:hidden可以清除浮动,原因就是overflow:hidden可以生成一个新的BFC,而这个浮动的子元素,被它所包含了,从而成为一个独立容器,它的 float 外溢不了了,外面的元素不再受其浮动的影响,从而达到了清除浮动的作用

<style>
.蓝色{
	width:150px;
	background:#ADD9E6;
	margin:20px 0;
}
.红色{
	width:100px;
	height:100px;
	background:#FFCCCC;
	margin:20px 0;
	//float:left;
}
</style>
<div class="蓝色"><div class="红色"></div></div>

四、BFC的常规作用

  1. 解决外边距重叠

  2. 解决子元素浮动,父元素高度塌陷

  3. 解决浮动元素周围文字环绕问题

<style>
  .outer {
    width: 400px;
    overflow: hidden;
    background-color: #eee;
  }

  .float {
    width: 200px;
    height: 100px;
    background-color: #1c88d3;
    float: left;
    margin-right: 20px;
  }

  .text {
    /* 创建BFC环境*/
    overflow: auto;
  }
</style>
<div class="outer">
  <div class="float">I am a floated element.</div>
  <div class="text">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto corporis, deleniti dicta dolores eum expedita
  explicabo ipsum magni numquam porro provident quae quam quas quibusdam repellendus sed unde voluptate
  voluptatibus.
  </div>
</div>

给text元素创建BFC前

给text元素创建BFC后

\