1.定义:
FC的全称为Formatting Conttext,元素在标准流里面
块级元素的布局属于Block Formatting Context(BFC)——即block level box都是BFC中布局
行内级元素的布局属于Inline Formatting Context (IFC)
2.那么在哪些情况下会创建BFC?
- 根元素(<html>)
- 浮动元素(元素的float不是none)
- 绝对定位元素(元素的position为absolute或fixed)
- 行内块元素(元素的display为inline-block)
- overflow计算值(Computed)不为visible的块元素
- 弹性元素(display为flex或inline-flex元素的直接子元素)
3.BFC特点:
- 在BFC中,box会在垂直方向上一个挨着一个的排布
- 垂直方向的间距由margin属性决定
- 在同一个BFC,相邻两个box之间的margin会折叠
- 在BFC中,每个元素的左边缘是紧挨着包含块的左边缘的
4.BFC作用:
- 解决边距重叠问题
- 解决高度塌陷问题
5.BFC如何解决边距重叠问题?
给box1的父盒子设置一个overflow: auto;box1在container的BFC里面,box2还在html的BFC里面→两两互不影响
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container {
overflow: auto;
}
.box1 {
width: 500px;
height: 200px;
background-color: #582a2a;
margin-bottom: 20px;
}
.box2{
width: 500px;
height: 200px;
background-color: #582a2a;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="container">
<div class="box1"></div>
</div>
<div class="box2"></div>
</body>
</html>
6.BFC如何解决高度塌陷问题?
(1)BFC解决高度塌陷需要满足两个条件:
- 浮动元素的父元素触发BFC,形成独立的块级格式化上下文
- 浮动元素的父元素的高度是auto
(2)BFC高度是auto的情况下,如何计算高度?
- 如果是inline-level,是行高的顶部和底部的距离
- 如果有block-level,是由最顶层的块上边缘和最底层块盒子的下边缘之间的距离
- 如果有绝对定位元素,将被忽略
- 如果有浮动元素,那么增加高度以包括这些浮动元素的下边缘
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container {
background-color:pink;
/* 触发BFC */
overflow: auto;
}
.item{
width: 500px;
height: 200px;
border: 1px solid #000;
float: left;
background-color: #ff0;
}
</style>
</head>
<body>
<div class="container">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</body>
</html>