CSS之BFC详解

概念

BFC(Block Formatting Context)直译为“块级格式化范围”,也可称为“格式化上下文”。是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用 当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照一定规则进行布局。一个环境中的元素不会影响到其它环境中的布局。比如浮动元素会形成BFC,浮动元素内部子元素的主要受该浮动元素影响,两个浮动元素之间是互不影响的。这里有点类似一个BFC就是一个独立的行政单位的意思。 也可以说BFC就是一个作用范围。可以把它理解成是一个独立的容器,并且这个容器的里box的布局,与这个容器外的毫不相干

触发条件

1、浮动元素,float 除 none 以外的值; 
2、定位元素,position(absolute,fixed); 
3、display 为以下其中之一的值 inline-block,table-cell,table-caption; 
4、overflow 除了 visible 以外的值(hidden,auto,scroll);

特性

1、内部的Box会在垂直方向上一个接一个的放置

2、垂直方向的距离有margin决定(属于同一个BFC的两个相邻Box的margin会发生重叠,与方向无关)

3、每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此

4、BFC的区域不会与float的元素区域重叠

5、计算BFC的高度时,浮动子元素也参与计算

6、BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面元素,反之亦然

常见作用

1. 不和浮动元素重叠



    

CSS之BFC详解_第1张图片

很明显,.aside和.mian重叠了。试分析一下,由于两个box都处在同一个BFC中,都是以BFC边界为起点,如果两个box本身都具备BFC的话,会按顺序一个一个排列布局,那现在给main生成BFC .main {overflow: hidden;},这个新的BFC不会与浮动的aside重叠。因此会根据包含块的宽度,和aside的宽度,自动变窄。

CSS之BFC详解_第2张图片

2.清除元素内部浮动



    

 CSS之BFC详解_第3张图片

为达到清除内部浮动,我们可以触发par生成BFC,那么par在计算高度时,par内部的浮动元素child也会参与计算.par{overflow:hidden}

CSS之BFC详解_第4张图片
 3.防止margin合并



    

Haha

Hehe

CSS之BFC详解_第5张图片

我们可以在p外面包裹一层容器,并触发该容器生成一个BFC。那么两个P便不属于同一个BFC,就不会发生margin重叠了。



    

Haha

Hehe

CSS之BFC详解_第6张图片

按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如边框,非空内容,padding等)就会发生margin重叠。 因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,但是对于两个相邻元素来说,意义不大,没有必要给它们加个外壳,但是对于嵌套元素来说就很有必要了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠了。


 

你可能感兴趣的:(css,BFC)