BFC(Block formatting context)
直译为"块级格式化上下文"。
元素的显示模式
咱们前面讲过 元素的显示模式 display。
分为 块级元素 行内元素 行内块元素 ,其实,它还有不少其余显示模式。
<img src="media/dis.png" style="border: 1px dashed #ccc; padding: 5px;" />
那些元素会具备BFC的条件
不是全部的元素模式都能产生BFC,w3c 规范:
display 属性为 block, list-item, table 的元素,会产生BFC.
你们有么有发现这个三个都是用来布局最为合理的元素,由于他们就是用来可视化布局。
注意其余的,display属性,好比 line 等等,他们建立的是 IFC ,咱们暂且不研究。
这个BFC 有着具体的布局特性:
有宽度和高度 , 有 外边距margin 有内边距padding 有边框 border。
什么状况下可让元素产生BFC
以上盒子具备BFC条件了,就是说有资质了,可是怎样触发才会产生BFC,从而创造这个封闭的环境呢?
一样,要给这些元素添加以下属性就能够触发BFC。
-float属性不为none
-position为absolute或fixed
-display为inline-block, table-cell, table-caption, flex, inline-flex
-overflow不为visible。
BFC元素所具备的特性
BFC布局规则特性:
1.在BFC中,盒子从顶端开始垂直地一个接一个地排列.
2.盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子的margin会发生重叠
3.在BFC中,每个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来讲,则触碰到右边缘)。
1. BFC的区域不会与浮动盒子产生交集,而是紧贴浮动边缘。
2. 计算BFC的高度时,天然也会检测浮动或者定位的盒子高度。
它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,而且与这个区域外部绝不相干。
BFC的主要用途
BFC能用来作什么?
1. 清除元素内部浮动
只要把父元素设为BFC就能够清理子元素的浮动了,最多见的用法就是在父元素上设置overflow: hidden样式,对于IE6加上zoom:1就能够了。
主要用到 :
计算BFC的高度时,天然也会检测浮动或者定位的盒子高度。
2. 解决外边距合并问题
外边距合并的问题。
主要用到 :
盒子垂直方向的距离由margin决定。属于同一个BFC的两个相邻盒子的margin会发生重叠
属于同一个BFC的两个相邻盒子的margin会发生重叠,那么咱们建立不属于同一个BFC,就不会发生margin重叠了。
3.制做右侧自适应的盒子问题
主要用到 :
普通流体元素BFC后,为了和浮动元素不产生任何交集,顺着浮动边缘造成本身的封闭上下文
BFC 总结
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。包括浮动,和外边距合并等等,所以,有了这个特性,咱们布局的时候就不会出现意外状况了。布局