浏览器上下文渲染之 BFC、IFC、FFC、GFC
浏览器能够解析各种各样的标签,你可以把每一个标签当做一个 box,不同样式的 box,相互堆积,相互嵌套,变成了花花绿绿的各种页面。很多人大概都知道,这些标签大体可以分两类,一类是块状(block)元素,一种是行内(inline)元素。一般人会理解为,块状元素垂直排列,行内元素横向排列,占满一行则会换行。但实际上呢,他们还具有一些其它的特性,且听我细细道来。
BFC
BFC 全称“block formatting context”,大概是说一个块状的元素是一个独立的盒子,这个 box参与创建 BFC,盒子内部的布局不影响外面,外面的布局页不会影响盒子内部。
BFC有以下特性:
当我们知道了 BFC 的这些特性之后,如何去触发 BFC 呢?
- float 不为 none
- overflow 不为 visible
- display 为 inline-block / table / tabel-cell / table-caption / flex / inline-flex
- position 为 absolute / fixed
- fieldset 元素
IFC
在讲 IFC 之前,需要先明白一个概念是 linebox,指的是一个一行的容器。一个 linebox 可能包含多个 inlinebox,一个 inlinebox 也可能呗拆分成多个 linebox,其宽度是由它包含的元素的宽度和里面有没有 float元素决定的。
IFC 全称“inline formatting context”,主要包含的特性有:
- inlinebox之间的 margin、padding,linebox本身的width,在水平方向会得到响应
- linebox 的高度由最高的容器高度决定
- 当容器的宽度大于 linebox 的宽度,则会溢出(inlinebox的宽度小于一个字,或者white-space设置了nowrap/pre)
- inlinebox的左边缘和右边缘紧挨 linebox 的左边缘和右边缘
FFC
FFC 全称“flex formatting context”,主要应用在自适应布局,属于 css3 的范畴,移动端的浏览器支持得都还不错,可以放心的使用。触发可以通过设置 display 的值为 flex 或者 inline-flex(webkit 核心浏览器早期则是通过设置 display:-webkit-box)。
https://www.w3.org/TR/css-flexbox-1/
GFC
GFC 全称“GridLayout formatting context”,主要应用在自适应布局,属于 css3 的范畴,通过 display:grid 来触发。
http://www.w3.org/TR/css3-grid-layout
中文翻译详解