# BFC
# BFC 何方神圣?
BFC(Block Formatting Context)块级格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。与区域外部无关。
换句话说,BFC就是为元素提供一个独立的容器,在该容器里按照一定的规则进行布局排列,该容器内的元素不会影响外部的元素,同理,外部的元素也不会影响内部的元素
# 如何创建BFC
- 浮动元素,float 除 none 以外的值
- 定位元素,position(absolute,fixed)
- display 为以下其中之一的值 inline-block,table-cell,table-caption
- overflow 除了 visible 以外的值(hidden,auto,scroll)
# BFC有啥特性
- 内部的Box会在垂直方向上一个接一个的放置。
- 垂直方向上的距离由margin决定
- BFC的区域不会与float的元素区域重叠。
- 计算BFC的高度时,浮动元素也参与计算
- BFC就是页面上的一个独立容器,容器里面的子元素不会影响外面元素
# BFC的其他作用
- BFC可以消除margin塌陷-margin-top塌陷,垂直方向的margin重叠
- BFC可以阻止元素被浮动元素覆盖
- 防止字体环绕
# 举个例子
# 一个盒子不设置height,当内容子元素都浮动时,父元素heifht为0,无法撑开父元素
# 产生这种情况的原因很简单,有以下两点:
- 父元素没有设置 height
- 子元素设置了 float 浮动,脱离了文档流
# 因子元素脱离了文档流,父元素无法统计到子元素的大小,因此子元素无法将父元素撑开,所以我们就要将浮动清除
那么我们平时是如何清除浮动的呢?最常见的可能就是给父元素添加样式 overflow: hidden了,其实这种方法就触发了BFC,在父元素内部形成了一个独立的环境,按照BFC的布局规则,该容器内的元素都会被统计到,因此浮动就被清除