BFC与边距重叠

一、 什么是BFC

块级格式化上下文(Block Formatting Context),也就是常说的BFC,它是Web页面的可视化CSS渲染区域的一部分,是布局过程中生成块级盒子的区域,也是浮动元素与其他元素的交互限定区域。

二、BFC的布局规则

  • 内部的盒子会在垂直方向,一个一个地放置

  • BFC是页面上的一个隔离的独立容器

  • 属于同一个BFC的两个相邻Box的上下margin会发生重叠

  • 计算BFC的高度时,浮动元素也要参与计算

  • 每个元素的左边,与包含的盒子的左边相接触,即使存在浮动也是如此

  • BFC的区域不会与float重叠

三、下列方式会创建BFC

1、根元素或包含根元素的元素,即body根元素

2、浮动元素,即float属性值不为none(元素的position为absolute或fixed)

3、行内块元素(元素的display为inline-block

4、表格单元格(元素的display为table-cell,HTML表格单元格默认为该值)

5、表格标题(元素的display为table-caption,HTML表格标题默认为该值)

6、匿名表格单元格元素(或者元素的display为table、table-row、table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot的默认属性)或inline-table)

7、overflow的值不为visible的元素(overflow为hidden

8、display值为flow-root`的元素

9、contain值为layout、content或strict`的元素

10、弹性元素(display为flex或inline-flex元素的直接子元素)

11、网格元素(display为grid或inline-grid元素的直接子元素)

12、多列容器(元素的colunm-count或column-width不为auto,包括column-count为1)

13、column-span为all的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器当中

四、BFC的特性及应用

1、两个相邻的普通流中的块元素垂直方向的margin会发生折叠




  

1.两个相邻的普通流中的块元素垂直方向上的margin会折叠

image.png

之所以会发生这样的情况是因为根据BFC布局规则中所述,位于同一个BFC中的相邻两个盒子之间的上下margin会发生折叠。
如果我们想阻止这种情况发生,很容易想到只要让两者位于不同的BFC当中就可以做到了,比如:

 


  
image.png

2、BFC可以包含浮动的元素

我们都知道在正常的情况下,浮动元素会脱离普通文档流,所以会有下面的代码

会导致父元素塌陷这样的效果:

image.png

外面的div无法包含内部的div,但是如果我们触发外部容器的BFC,根据BFC布局规则,计算BFC高度时,浮动元素也要参与在内,那么外部容器将会包裹着浮动元素,通过这样的方式达到阻止父元素塌陷的效果。我们用最简单的触发BFC的方式,将容器元素的overflow属性值设为非visible。

3、BFC阻止元素被浮动元素覆盖

如果有这么一段代码:

 

image.png

之所以会这样是因为BFC布局规则规定,每个元素的左边与包含的盒子的左边相接处,即使存在浮动也是如此。为了防止这种情况发生,同样我们可以通过触发BFC来完成:

 
image.png

BFC的区域不会与浮动元素产生任何交集,顺着浮动边缘形成自己的封闭上下文

你可能感兴趣的:(BFC与边距重叠)