美文网首页
BFC的理解和运用

BFC的理解和运用

作者: 阿尔卑斯的隆冬 | 来源:发表于2018-08-14 12:43 被阅读38次

1. 什么是BFC?

BFC全称为Block Formatting Context,即“块级格式化上下文”,它是页面中相对独立的一块渲染区域,它决定了内部的子元素如何进行摆放和定位,以及区域内部元素和区域外部元素之间的相互作用关系。

2. BFC有什么特点?

当一个元素容器创建BFC后,主要有以下表现特点:

  • BFC可以包含浮动元素(闭合浮动
  • BFC所确定的区域不会与外部浮动元素发生重叠
  • 位于同一BFC下的相邻块级子元素垂直方向上会发生margin重叠
  • 位于不同BFC下的相邻元素之间不会发生margin重叠

将以上特点一言以蔽之,即BFC在页面上是一个封闭的区域,如同“结界”一般。即便是内部的浮动元素也无法脱离该区域。该区域内部的子元素无法影响区域外部,同时也不受外部影响。

3. 如何触发/创建BFC?

若某个元素满足以下任一条件,则会对其创建BFC:

  • <html>根元素
  • float的值不为none
  • overflow的值为auto、scroll或hidden
  • display的值为table-cell、table-caption或inline-block
  • position的值为fixed或absolute

4. BFC的常见用途

既然BFC有如上特点,那么该如何将其利用到我们日常的布局中呢?一般来说,BFC的常见用途有如下三个:

闭合浮动

由于BFC可以包含浮动元素,所以当一个元素容器内部存在浮动元素时,为了防止容器高度“坍塌”,可以对容器创建BFC:

#container {
    overflow: auto;  /* 创建BFC */
}

阻止margin重叠

假设有如下代码:

/* HTML代码 */
<div id="box1">我是box1</div>
<div id="box2">我是box2</div>

/* CSS代码 */
#box1 {
    margin-bottom: 20px;
    background-color: lightskyblue;
}

#box2 {
    margin-top: 20px;
    background-color: orange;
}

由于box1box2处于同一上下文,所以在垂直方向上会发生margin重叠:

margin重叠

为了阻止两者发生margin重叠,可以为box2添加一个BFC容器:

/* HTML代码 */
<div id="box1">我是box1</div>
<div id="bfc">
    <div id="box2">我是box2</div>
</div>
/* CSS代码 */
#bfc {
    overflow: auto;  /* 创建BFC */
}

这样一来,box1box2就属于两个不同的上下文,也就不会发生margin重叠了:

BFC阻止margin重叠

不过需要注意的是,不要错误地以为BFC容器也能与box1之间发生margin不叠加;事实上由于此时变成了BFC容器与box1在同一上下文中,所以BFC容器仍会与box1发生margin重叠,如:

#bfc {
    overflow: auto;  /* 创建BFC */
    margin-top: 20px;
}

则有:

BFC容器与box1发生margin重叠

自适应流体布局

BFC最强大的用途其实是用于自适应流体布局,这是基于BFC所确定的区域不会与外部浮动元素发生重叠的特性实现的:
假设我们需要创建一个左侧宽度固定为200px,右侧宽度自适应的两列布局,一般情况下有如下解决方案:

/* HTML代码 */
<div id="layout">
    <div id="left"></div>
    <div id="right"></div>
</div>

/* CSS代码 */
#layout{
    overflow: auto;   /* 创建BFC闭合浮动 */ 
}

#left {
    width: 200px;
    float: left;
}

#right {
    margin-left: 200px;
}

虽然这个方案简单有效,但是有一个缺点,那就是需要在#right中设定margin-left值来为左侧留出空间;那如果要修改左侧的宽度,相应地也要修改margin-left,这样就会很麻烦。

但如果利用BFC的特点,将#right中的代码改为:

#right {
    overflow: auto;  /* 创建BFC */
}

这样就既保留了right原有的流体特性(默认占满父元素宽度),也通过BFC根据左侧浮动元素的尺寸对右侧栏的宽度进行自动剪裁,从而完成了自适应的布局效果。

相关文章

  • BFC的理解和运用

    1. 什么是BFC? BFC全称为Block Formatting Context,即“块级格式化上下文”,它是页...

  • BFC

    一、BFC是什么 BFC(box formatting context),要了解BFC是什么需要先理解box和fo...

  • 关于CSS的BFC

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

  • css-BFC

    BFC(block formatting context):块格式化上下文 理解BFC BFC和堆叠上下文都没有定...

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

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

  • BFC理解

    Block formatting context (块级格式化上下文) 页面文档由块block构成 每个block...

  • 理解BFC

    一、常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...

  • 理解BFC

    原文连接:https://zhuanlan.zhihu.com/p/25321647 一、常见定位方案 在讲 BF...

  • 理解BFC

    BFC 的全称是 Block Formating Context,译为“块级格式化上下文”,是 CSS 规范中的一...

  • 理解BFC

    BFC全称 Block Formatting Context,是web上一种css的渲染方式,能够让浮动和其他元素...

网友评论

      本文标题:BFC的理解和运用

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