美文网首页美工
CSS BFC 扫盲篇

CSS BFC 扫盲篇

作者: dkvirus | 来源:发表于2019-02-26 17:52 被阅读27次

有人问我对 CSS 的 BFC 了解多少,我一脸懵逼。后来谷歌查询了一番,发现工作中已经多次使用了 BFC 特性却不自知,比如清除浮动我知道用 overflow: hidden; 那时候还纳闷为啥加了这句就可以清除浮动,原来底层原理是由 BFC 决定的。

BFC 是什么?

BFC 提供页面布局的一套规则:

  • 规则一:计算 BFC 的高度时,浮动元素也参与计算;
  • 规则二:BFC 的区域不会与 float box 重叠;
  • 规则三:Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box 的 margin 会发生重叠。

怎么实现 BFC?

可以通过为 html 标签添加如下属性使其具有 BFC 的布局规则。最常见方式为设置 overflow: hidden 属性。

  • 根元素 html;
  • float 属性不为 none;
  • position 为 absolute 或 fixed;
  • display 为 inline-block, table-cell, table-caption, flex, inline-flex;
  • overflow 不为 visible,最常见的 overflow 为 hidden。

BFC 能解决什么问题?

清除浮动

<style>
  .parent {
    background: blue;
    width: 150px;
    border: 5px solid red;
  }
  .child {
    width: 100px;
    height: 100px;
    background: pink;
  }
</style>

<div class="parent">
    <div class="child">子div</div>
</div>
图1图1

上图,父 div 的高度根据子 div 高度自适应。

现在将子 div 设置为浮动元素,子 div 脱离文档流,父 div 的高度变成了 0。

image.pngimage.png

BFC规则一:计算BFC的高度时,浮动元素也参与计算。

要想父 div 具有 BFC 的特性,参考上面👆“怎么实现 BFC”,最常用的方式是添加属性 overflow: hidden 。添加该属性后可以发现父 div 又具有高度了!

.parent {
  background: blue;
  width: 150px;
  border: 5px solid red;
  overflow: hidden;     <!-- 设置为具有 BFC 特性 -->
}

自适应双栏布局

之前做双栏布局都在用 flex。

<style>
  .container {
    display: flex;
  }
  .left {
    width: 100px;
    height: 400px;
    background: green;
  }
  .right {
    flex: 1;
    background: red;
  }
</style>

<div class="container">
  <div class="left">左边</div>
  <div class="right">右边</div>    
</div>

上面👆的代码可以看到外面还有一层 div(.container) 包裹着。这会学了 BFC,有了更简单的实现方式。

规则二:BFC的区域不会与float box重叠;

<style>
  .left {
    width: 100px;
    height: 400px;
    background: green;
    float: left;
  }
  .right {
    overflow: hidden;
    background: red;
  }
</style>

<div class="left">左边</div>
<div class="right">右边</div>    

可以看到,这里不需要外层 div 包裹了。左边添加 float,右边设置成 BFC。

image.pngimage.png

其它问题

在网上还看到可以解决外边距重叠等问题,实际工作中并没有应用过,感兴趣的可以阅读下面👇的扩展文章。

参考文章

相关文章

  • CSS BFC 扫盲篇

    有人问我对 CSS 的 BFC 了解多少,我一脸懵逼。后来谷歌查询了一番,发现工作中已经多次使用了 BFC 特性却...

  • CSS篇——BFC

    一、BFC是什么 BFC(Block Format Content)又称块级格式化上下文。是页面盒模型布局中的一种...

  • CSS清除浮动的方法

    BFC CSS中的BFC BFC:block formatting context块级格式化上下文; BFC 与清...

  • 前端系列知识目录

    CSS系列??? 10 分钟理解 BFC 原理 JavaScript系列学习??? 进阶篇 ? JavaScirp...

  • CSS BFC和CSS hack

    简述CSS BFC和CSS hack BFC BFC定义:浮动元素和绝对定位元素,非块级盒子的块级容器(例如inl...

  • 关于 BFC 的布局应用:清除浮动、文字环绕

    关于 BFC 的布局应用:清除浮动、文字环绕 参考文档:理解CSS中BFC BFC(Block Formattin...

  • 快速弄懂 BFC

    参考 BFC 是什么 css 2.1 规范。BFC(Block formatting context)直译为"块级...

  • CSS-BFC的理解

    简介在使用CSS的过程中,经常会听到触发BFC,但是何为BFC。BFC(Block formatting cont...

  • 前端面试基础题

    BFC、IFC、GFC、FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC。 到底什么是BF...

  • 前端知识点之谈一谈css盒模型、BFC

    知识点:--css 盒模型--标准模型和 IE 模型--BFC 谈一谈 css 盒模型、BFC 是面试中常见的问题...

网友评论

    本文标题:CSS BFC 扫盲篇

    本文链接:https://www.haomeiwen.com/subject/gulzyqtx.html