BFC
BFC 是什么东西
BFC 称为块级格式化上下文,是一个拥有独立渲染区域的盒子,规定内部元素如何布局,并且盒子内部元素与外部元素互不影响
BFC 渲染规则
- 内部的盒子会在垂直方向,一个接一个的放置
- 盒子垂直方向的距离由 margin 决定,属于同一个 BFC 的两个相邻的盒子的 margin 会发生重叠
- 计算 BFC 高度的时,浮动的元素也参与计算
- BFC 就是页面上一个隔离的独立容器,里面的子元素不会影响到外面的元素
BFC 解决了什么问题
两栏布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>使用float脱离文档流,高度塌陷</title>
<style>
div {
width: 200px;
height: 100px;
border: 1px solid red;
}
</style>
</head>
<body>
<div style="float: left">两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局</div>
<div style="width: 300px;overflow: auto">两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局两栏布局</div>
</body>
清除内部浮动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>高度塌陷</title>
<style>
.box {
margin: 100px;
width: 100px;
height: 100px;
background: red;
float: left;
}
.container {
overflow: hidden;
background: #000;
}
</style>
</head>
<body>
<div class="container">
<div class="box"></div>
<div class="box"></div>
</div>
</body>
</html>
margin 边距重叠
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>高度塌陷</title>
<style>
.a,
.b {
width: 100px;
height: 100px;
background: red;
border: 1px solid #999;
margin: 10px;
}
.contain {
overflow: hidden;
}
</style>
</head>
<body>
<div class="layout">
<div class="a">a</div>
<div class="contain">
<div class="b">b</div>
</div>
</div>
</body>
</html>
如何触发BFC
- 根元素 HTML
- display为inline-block或者display
- overflow不为visible
- float不为none
- position为fixed或asbolute