BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
BFC作用:
- BFC元素不与浮动元素相重叠(两栏布局)
- 清除内部浮动 (撑开高度)
- 原理: 触发父div的BFC属性,使下面的子div都处在父div的同一个BFC区域之内
- 分属于不同的BFC时,可以阻止margin重叠
如何生成BFC:(脱离文档流)
- 根元素,即HTML元素(最大的一个BFC)
- float的值不为none
- position的值为absolute或fixed
- overflow的值不为visible(默认值。内容不会被修剪,会呈现在元素框之外)
- display的值为inline-block、table-cell、table-caption
BFC布局规则:
- 内部的Box会在垂直方向,一个接一个地放置。
- 属于同一个BFC的两个相邻的Box的margin会发生重叠
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此, 文字环绕效果,设置float
- BFC的区域不会与float box重叠。
- 计算BFC的高度,浮动元素也参与计算
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>BFC自适应两栏布局</title>
<style>
.left {
width: 200px;
height: 500px;
float: left;
background: #999;
}
.main {
height: 800px;
background: #aaa;
overflow: auto;
color: #fff;
}
</style>
</head>
<body>
<div class="left"></div>
<div class="main">
<h1>BFC 两栏布局</h1>
<p>
左侧块浮动到左边,但是因为是浮动块,右侧块高度一旦超过左侧块后文字就会出现在左侧的下方,因为没有块把它挡住。
</p>
<p>解决办法: 让右侧块变为BFC文字就不会横过去。因为BFC元素不与Float元素相重叠。</p>
</div>
</body>
</html>