.main {
overflow: hidden;
}
复制代码
当触发main生成BFC后,这个新的BFC不会与浮动的aside重叠。所以会根据包含块的宽度,和aside的宽度,自动变窄。效果以下: 布局

- 消除margin重叠 Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
根据规范,一个盒子若是没有上补白(padding-top)和上边框(border-top),那么这个盒子的上边距会和其内部文档流中的第一个子元素的上边距重叠。两个相邻的margin之间若是没有明确的界限(padding、border),则会发生重叠,重叠后相应的margin为较大的那个post
例子:flex
- 盒子的top margin和它第一个普通流子元素的top margin
- 盒子的bottom margin和它下一个普通流兄弟的top margin
- 盒子的bottom margin和它父元素的bottom margin
- 盒子的top margin和bottom margin,且没有建立一个新的块级格式上下文,且有被计算为0的min-height,被计算为0或auto的height,且没有普通流子元素
<style> p { color: #f55; background: #fcc; width: 200px; line-height: 100px; text-align:center; margin: 100px; } </style>
<body>
<p>Haha</p>
<p>Hehe</p>
</body>
复制代码
两个p之间的margin仅为100px, 是由于他们 同属于 body这个根元素,根据规则3,他们会发生margin重叠。因此咱们须要让它们 不属于同一个BFC,就能避免外边距折叠spa
<style> .wrap { overflow: hidden; } p { color: #f55; background: #fcc; width: 200px; line-height: 100px; text-align:center; margin: 100px; } </style>
<body>
<p>Haha</p>
<div class="wrap">
<p>Hehe</p>
</div>
</body>
复制代码
- 清除元素内部浮动 当container内部有float元素时,container自己没有高度,里面的子元素也会脱离文档流,为了不这个状况,能够用BFC,根据BFC规范中的第4条:计算BFC的高度时,浮动元素也参与计算,那么外部div容器就能够包裹着浮动元素
.container {
overflow: hidden; /* creates block formatting context */
background-color: green;
}
.container div {
float: left;
background-color: lightgreen;
margin: 10px;
}
复制代码
参考3d
- https://juejin.im/post/5a4dbe026fb9a0452207ebe6
- https://juejin.im/post/59b73d5bf265da064618731d