浮动,绝对定位元素,非块盒的块容器(例如,
inline-blocks
,table-cells
和table-captions
)和overflow
不为visible
的块盒(当该值已被传播到视口时除外(except when that value has been propagated to the viewport))会为它们的内容创建一个新的块格式化上下文html
BFC布局规则:布局
BFC内部盒会在垂直方向,一个接一个的放置post
盒的垂直方向的距离由margin
决定.属于同一个BFC的两个相邻盒子的margin
会发生重叠学习
每一个元素的margin box
的左边,与包含块border box
的左边相接触(对于从左往右的格式化,不然相反).即便存在浮动也如此flex
BFC的区域不会与float box
重叠(利用这个特性能够作自适应窗口大小)code
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素.反之也是如此htm
计算BFC高度时,浮动元素也参与计算(清除浮动的原理)blog
块格式化上下文由如下之一建立:get
根元素或其它包含它的元素it
浮动(元素的float
不是none
)
绝对定位的元素(元素具备position
为absolute
或fixed
)
行内块 inline-blocks(元素具备display:inline-block
)
表格单元格(元素具备display:table-cell
,表格单元格默认属性)
表格标题(元素具备display:table-caption
,表格标题默认属性)
块元素 元素具备overflow
值不是visible
弹性盒子flex boxes(元素具备display:flex
或inline-flex
)
display:flow-root
一个块格式化上下文包括建立它的元素内部全部内容,除了会建立新的块格式化上下文的元素
BFC能够解决margin
折叠问题,须要注意的是,overflow:hidden
等属性只在父子元素下起做用,相邻兄弟元素无效
BFC能够改变float的覆盖兄弟元素的问题,实现一侧定宽的布局,还能够解决父元素塌陷问题