0%

BFC

BFC

BFC,即 block-formatting-context,块级格式化上下文。通俗来说,BFC 是一个完全独立的区域,在区域内的子元素不会影响到外面的布局。

BFC 创建方法

  • 根元素(html)
  • 浮动元素
  • 定位为 absolute 或 fixed
  • 行内块元素(display: inline-block)
  • overflow 的值不为 visible
  • flex box(display: flex 或 inline-flex)

BFC 的特征

  • 属于同一个 BFC 的两个相邻元素的 margin 会发生重叠,不同的 BFC 之间 margin 不重合(解决 margin 重叠)
  • 计算 BFC 的高度时,浮动元素也参与计算(清除浮动)
  • BFC 的区域不会与 float 元素重叠(两栏布局)

BFC 可以解决的问题

防止 margin 重叠

使用 BFC 前

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<style>
p {
color: #f55;
background: #fcc;
width: 200px;
line-height: 100px;
text-align:center;
margin: 100px;
}
</style>

<body>
<p>A</p>
<p>B</p>
</body>


因为 margin 塌陷,实际两者之间只间隔了 100 px。

使用 BFC 后

1
2
3
4
5
6
7
8
9
10
11
12
<style>
.wrap {
overflow: hidden;
}
</style>

<body>
<p>A</p>
<div class="wrap">
<p>B</p>
</div>
</body>

水平方向和嵌套同理。

清除浮动

使用 BFC 前

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<style>
.parent {
border: 5px solid #fcc;
width: 300px;
}

.child {
border: 5px solid #f66;
width: 100px;
height: 100px;
float: left;
}
</style>

<body>
<div class="parent">
<div class="child"></div>
<div class="child"></div>
</div>
</body>

使用 BFC 后

1
2
3
.parent {
overflow: hidden;
}

自适应两栏布局

使用 BFC 前

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<style>
body {
width: 300px;
position: relative;
}

.aside {
width: 100px;
height: 150px;
float: left;
background: #f66;
}

.main {
height: 200px;
background: #fcc;
}
</style>

<body>
<div class="aside"></div>
<div class="main"></div>
</body>

使用 BFC 后

1
2
3
.main {
overflow: hidden;
}

参考资料:
https://github.com/zuopf769/notebook/blob/master/fe/BFC%E5%8E%9F%E7%90%86%E5%89%96%E6%9E%90/README.md

本文标题:BFC

文章作者:Flower-F

发布时间:2021年12月30日 - 14:43

最后更新:2022年01月19日 - 16:40

-------------本文结束,感谢您的阅读-------------

欢迎关注我的其它发布渠道