BFC块格式化上下文

1.什么是BFC

MDN官方对于BFC的定义是:块格式化上下文(Block Formatting Context,BFC)是 Web 页面的可视 CSS 渲染的一部分,是块级盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

也就是说,BFC是页面上的一个独立的区域,在它里面的元素不会影响到外面的元素。

2.BFC的触发条件:

①根元素:html

②浮动元素:float值为left或right

③overflow值为hidden或scroll或auto

④position值为absolute或fixed

⑤display值为inline-block或flex或grid

3.BFC的使用场景:

①防止margin重叠

 有两个div盒子,都给他设置了外边距margin值为100px,按理来说在页面上渲染出来就应该是两个盒子之间有个200px的间距。

  <div></div>
  <div></div>
  <style>
    div {
      width: 100px;
      height: 100px;
      background-color: pink;
      margin: 100px;
    }
  </style>

但是结果呢,很明显渲染出来的只是一个100px的间距,另一个100px没渲染出来。因为两个div都处于同一个BFC容器下(html),所以第二个div的上边距和第一个div的下边距发生了重叠,所以两个盒子之间的间距只有100px。这就是外边距塌陷的问题,也被叫做外边距折叠。

外边距塌陷遵循的规则:

①两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。

②两个相邻的外边距是一正一负时,折叠结果是它们两者之和。

③两个相邻的外边距都是负数时,折叠结果是它们两者绝对值的较大值。

那么,如何解决这个问题呢?给这两个盒子可以分别放到两个不同的BFC中。此时,两个盒子的外边距都会渲染出来,也不会出现外边距重叠的问题。

  <div class="container">
    <div class="one"></div>
  </div>

  <div class="container">
    <div class="two"></div>
  </div>

 <style>
    .container {
      overflow: hidden;
    }

    .one,
    .two {
      width: 100px;
      height: 100px;
      background-color: pink;
      margin: 100px;
    }
  </style>

②清除浮动

当父盒子没有设置高度,想让子元素的内容把父盒子的高度撑起来。但是子元素设置了浮动,就会脱离标准流,并不会撑起父元素的高度,使父元素的高度为0。

  <div class="container">
    <div class="one"></div>
  </div>
  <style>
    .container {
      border: solid 2px rgb(0, 0, 0);
    }

    .one {
      width: 100px;
      height: 100px;
      background-color: pink;
      float: left;
    }
  </style>

 此时父元素只是2px的边框高度,子元素并没有撑开父盒子。想要解决这个问题,就触发父元素的BFC。给父元素添加一个 overflow: hidden来触发BFC。这样,父元素的高度就由子元素撑开了。

  .container {
      border: solid 2px rgb(0, 0, 0);
      overflow: hidden;
  }

 ③实现自适应三栏布局

左右两边两个盒子定宽,中间盒子随窗口大小自适应改变大小。

  <div class="left">1</div>
  <div class="right">3</div>
  <div class="center">2</div>
  <!-- 这里中间的盒子必须写在最后面,这样设置了左右两个盒子设置了左右浮动之后,不占位,中间的center盒子自动顶上去 -->
  <style>
    .left {
      width: 100px;
      height: 100px;
      background-color: pink;
      float: left;
    }

    .right {
      width: 100px;
      height: 100px;
      background-color: pink;
      float: right;
    }

    .center {
      height: 100px;
      background-color: skyblue;
      overflow: hidden;
      /* 开启BFC不受外边两个盒子的影响,自己形成一个独立的区域 */
    }
  </style>

猜你喜欢

转载自blog.csdn.net/weixin_70443954/article/details/128119672
今日推荐