-BFC
块格式化上下文(Block Formatting Context,BFC)
块格式化上下文(Block Formatting Context,BFC)
块格式化上下文(Block Formatting Context,BFC)
什么是BFC
浮动元素和绝对定位元素,非块级盒子的块级容器(例如
inline-blocks
,table-cells
, 和table-captions
),以及overflow
值不为visiable
的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文),
在
BFC
中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin
值所决定的,在一个BFC
中,两个相邻的块级盒子的垂直外边距会产生折叠,
在
BFC
中,每一个盒子的左外边缘,会触碰到容器的左边缘(对于从右到左的格式来说,则触碰到右边缘),
通俗理解
浮动元素会创建
BFC
,则浮动元素内部子元素主要受该浮动元素影响,所以两个浮动元素之间是互不影响的
BFC
是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品
如果一个元素符合触发
BFC
的条件,则BFC
中的元素布局不受外部影响
BFC
特性
BFC
是一个独立的容器,容器内子元素不会影响容器外的元素反之亦如此- 盒子从顶端开始垂直地一个接一个地排列,盒子之间垂直的间距是由
margin
决定的 - 在同一个
BFC
中,两个相邻的块级盒子的垂直外边距会发生重叠 BFC
区域不会和float box
发生重叠BFC
能够识别并包含浮动元素,当计算其区域的高度时,浮动元素也可以参与计算了
创建BFC
- ** 根元素()
- ** 浮动元素(元素的 float 不是 none)
- ** 绝对定位元素(元素的 position 为 absolute 或 fixed)
- **
overflow
计算值(Computed)不为 visible 的块元素 - ** 行内块元素(元素的 display 为 inline-block)
- ** 弹性元素(display 为 flex 或 inline-flex 元素的直接子元素)
- 表格单元格(元素的 display 为 table-cell,HTML表格单元格默认为该值)
- 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
MDN BFC 这里介绍比较详细
了解创建新BFC
的效果
让浮动内容和周围的内容等高
1 | <style> |
效果展示
I am a floated box! 让浮动内容和周围的内容等高
I am content inside the overflow:auto
container.
创建新的BFC
避免两个相邻<div>
之间的外边距margin
合并问题
1 | <style> |
展示效果