Css面试题:BFC(格式化上下文)

1、概述

BFC(Block Formatting Context 格式化上下文)

官方文档是这么解释的:
一个BFC区域包含创建该上下文元素的所有子元素,但是不包括创建了新的BFC的子元素的内部元素,BFC是一块块独立的渲染区域,可以将BFC看成是元素的一种属性,拥有了这种属性的元素就会使得他的子元素与世隔绝,不会影响到外部其他元素。

可以理解为我的小弟我来管,即便是大哥来了你也只能管我,也不能管我的小弟

总结下来就是:(1)每一个BFC区域只包括其下子元素,不包括其子元素的子元素(2)每一个BFC区域都是隔离的,不受外部影响
举个例子:

<div class="box1">
    <div class="box2"></div>
    <div class="box3"></div>
    <div class="box4">
        <div class="box5"></div>
        <div class="box6"></div>
        <div class="box7"></div>
    </div>
</div>

box1和box4是两个BFC区域,box1的BFC区域包括box2,box3,box4,但不包括box4下的子元素,而box4的BFC区域包括了box5,box6,box7这几个子元素,不受box1的影响。

2、形成BFC的方式

  • body根元素
  • 设置浮动
  • 子元素设置定位absolute/fixed
  • 父元素设置overflow:hidden
  • 表格单元格 table-cell
  • 父元素设置弹性布局flex
  • 子元素设置为行内布局display:inline-block;
  • 父元素设置透明边框:border:1px solid transparent;

3、解决的问题

3.1 解决浮动元素令父元素高度坍塌的问题

如图:有三个浮动div,并且他们有一个共同的父元素div。

解释:
在这里插入图片描述

(1)在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。
(2)当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。
(3)由于父元素的高度塌陷了,则父元素下的所有元素都会向上移动,这样将会导致页面布局混乱。
通过overflow:hidden解决这个问题,如下:
在这里插入图片描述

3.2 解决垂直外边距合并问题(垂直塌陷)

在这里插入图片描述

根据上图,给两个元素都添加了margin:50px,他们之间原本应该相聚100px才对,而这里就只相聚50px,这就是外边距塌陷问题,解决就是,给这两个元素各自添加一个父元素,父元素设置overflow:hidden,如下:

在这里插入图片描述

3.3 解决包含塌陷问题

包含塌陷如下:
在这里插入图片描述

可以看到我们只给子元素设置了margin-top,但效果却体现在了父元素上,这就是包含塌陷。
有两种解决方式:方式一是给父元素添加个边框,内外边框都可以,方式二就是通过给父元素设置为BFC区域,即可解决,结果如下:

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值