CSS 布局之 —— BFC

作者: sylvia_yue | 来源:发表于2019-04-08 19:14 被阅读6次

1. BFC 是什么?

BFC--块级格式化上下文(Block Formatting Context),是一个独立渲染的块级盒子,其内部的元素与外部的元素相互隔离,内外元素的定位不会相互影响。

2. 应用

2.1 清除浮动

  • 浮动元素是脱离文档流的,如下图:


    image
  • 对应代码:

html 部分:

<div class="container-clear-none">
  <div class="floated">
    Floated element
  </div>
  BFC特性:其内部的所有元素都会被其包裹。
</div>

css 部分:

.container-clear-none{
    background-color: #f5d3dc;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

若触发浮动元素的父级容器的BFC,那么容器会包裹浮动元素,起到清除浮动的作用。


image
  • 对应代码:

html 部分:

<div class="container-clear">
  <div class="floated">
    Floated element
  </div>
  BFC特性:其内部的所有元素都会被其包裹。
</div>

css 部分:

.container-clear{
    background-color: #f5d3dc;
    overflow: hidden;
 }
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

2.2 清除文字环绕

同一容器内,与浮动元素同级的元素会有部分被覆盖,但文字不会,而是会环绕浮动元素。


image
  • 对应代码:

html 部分:

<div class="container">
  <div class="floated">
    Floated element
  </div>
  <div>BFC特性:包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。</div> 
</div>

css 部分:

.container {
    background-color: #f5d3dc;
    overflow: hidden;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

有些情况下不想要第二个元素被覆盖,可触发第二个元素的 BFC ,则第二个元素不会被覆盖,这种方法也可用来实现两列自适应布局。


image
  • 对应代码:

html 部分:

<div class="container">
  <div class="floated">
    Floated element
  </div>
  <div class="text">BFC特性:包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。包裹浮动元素。</div>
</div>

css 部分:

.container {
    background-color: #f5d3dc;
    overflow: hidden;
}
.container > .text {
    background-color: rgb(183, 245, 242);
    overflow: hidden;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

2.3 清除 margin 叠加

margin 叠加:当两个垂直边界相遇时,它们将形成一个边界。这个边界的高度等于两个发生叠加的边界的高度中的较大者。


image
  • 对应代码:

html 部分:

<div class="container-margin-none">
  <div class="block">block 1</div>
  <div class="block">block 2</div>
  <div class="block">block 3</div>
</div>

css 部分:

.container-margin-none {
    background-color: #f5d3dc;
    overflow: hidden;
}
.container-margin-none div {
    background-color: lightgreen;
    margin: 20px 0;
}
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

若想清除 margin 叠加,可触发某个元素的BFC,则这个元素会是一个独立的区域,不再产生 margin 叠加。


image
  • 对应代码:

html 部分:

<div class="container-margin">
  <div class="block">block 1</div>
  <div class="block">block 2</div>
  <div class="newBFC">
    <div class="block">block 3</div>
  </div>
</div>

css 部分:

.container-margin {
    background-color: #f5d3dc;
    overflow: hidden; 
 }
.container-margin .block {
    margin: 20px 0;
    /* height: 20px; */
    background-color: lightgreen;
}
.container-margin .newBFC {
    overflow: hidden;
 }
.floated {
    float: left;
    background-color: #cadaed;
    margin: 10px;
    padding: 20px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

3. 常用的 BFC 的触发条件

  • 根元素
  • ovevflow !== visible
  • float 不是 none
  • positon: absolute / fixed
  • display: inline-block / flow-root / table相关

参见:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context

相关文章

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

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

  • CSS 布局之 —— BFC

    1. BFC 是什么? BFC--块级格式化上下文(Block Formatting Context),是一个独立...

  • CSS进阶(二)

    BFC 渐进增强和优雅降级 CSS验证 / 压缩 圣杯布局与双飞翼布局 BFC(块级格式化上下文) BFC(Blo...

  • BFC

    什么是BFC? 简单的来说:BFC就是一个css的一个布局概念,是一个独立的区域,是一个环境。 文档流 说BFC之...

  • BFC原理

    BFC是什么? 了解BFC之前,先了解Box,Formatting Content的概念 Box:CSS布局的基本...

  • 关于CSS的BFC

    参考:理解CSS布局和BFCCSS深入理解流体特性和BFC特性下多栏自适应布局 1、概念BFC(Block For...

  • 前端面试试题

    HTML 和 CSS 页面布局 css盒模型 BFC 页面布局 有5中可以解决: ​ 第一种:浮动 ....

  • CSS布局之--理解BFC

    前言 css一直不是我的强项,这也是我第一篇css相关的文章,虽然我平时css写的比较少,但其中比较重要的基础...

  • CSS2.1

    CSS CSS2.1 固定定位的扩展理解 经典布局 BFC Box Formatting Context Bloc...

  • Day13:H5+JS+C3

    css布局中,什么是BFC BFC是Block formatting context的缩写,表示“块级格式化上下文...

网友评论

    本文标题:CSS 布局之 —— BFC

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