Formatting Context
,格式化上下文,指页面中一个渲染区域,拥有一套渲染规则,它决定了其子元素如何定位,以及与其余元素的相互关系和做用。布局
Block Formatting Context
,块级格式化上下文,一个独立的块级渲染区域,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关。flex
BOX
会在垂直方向上一个接一个的放置;margin
决定。(完整的说法是:属于同一个BFC
的俩个相邻的BOX
的margin
会发生重叠,与方向无关。)position
为absolute
的元素能够超出它的包含块边界);BFC
的区域不会与float
的元素区域重叠;BFC
的高度时,浮动子元素也参与计算;BFC
就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然;margin
发生重叠float
的值不为none
;overflow
的值不为visible
;display
的值为inline-block
table-cell
table-caption
;position
的值为absolute
或fixed
;display:table
也认为能够生成BFC
?实际上是在于Table
会默认生成一个匿名的table-cell
,正是这个匿名的table-cell
生成了BFC
。
IFC(Inline Formatting Contexts)
直译为"行内格式化上下文",IFC
的line box
(线框)高度由其包含行内元素中最高的实际高度计算而来(不受到竖直方向的 padding/margin
影响)code
IFC
中的line box
通常左右都贴紧整个IFC
,可是会由于float
元素而扰乱。float
元素会位于IFC
与与line box
之间,使得line box
宽度缩短。IFC
中时不可能有块级元素的,当插入块级元素时(如p
中插入div
)会产生两个匿名块与div
分隔开,即产生两个IFC
,每一个IFC
对外表现为块级元素,与div
垂直排列。inline-block
则会在外层产生IFC
,经过text-align
则可使其水平居中。IFC
,用其中一个元素撑开父元素的高度,而后设置其vertical-align:middle
,其余行内元素则能够在此父元素下垂直居中。GFC(GridLayout Formatting Contexts)
直译为"网格布局格式化上下文",当为一个元素设置display
值为grid
的时候,此元素将会得到一个独立的渲染区域,咱们能够经过在网格容器(grid container)
上定义网格定义行(grid definition rows)
和网格定义列(grid definition columns)
属性各在网格项目(grid item)
上定义网格行(grid row)
和网格列(grid columns)
为每个网格项目(grid item)
定义位置和空间。 orm
GFC
将改变传统的布局模式,他将让布局从一维布局变成了二维布局。简单的说,有了GFC
以后,布局再也不局限于单个维度了。这个时候你要实现相似九宫格,拼图之类的布局效果显得格外的容易。继承
FFC(Flex Formatting Contexts)
直译为"自适应格式化上下文",display
值为flex
或者inline-flex
的元素将会生成自适应容器(flex container)
。文档
Flex Box
由伸缩容器和伸缩项目组成。经过设置元素的 display
属性为 flex
或 inline-flex
能够获得一个伸缩容器。设置为 flex
的容器被渲染为一个块级元素,而设置为 inline-flex
的容器则渲染为一个行内元素。it
伸缩容器中的每个子元素都是一个伸缩项目。伸缩项目能够是任意数量的。伸缩容器外和伸缩项目内的一切元素都不受影响。简单地说,Flexbox
定义了伸缩容器内伸缩项目该如何布局。io
FFC
与BFC
有点儿相似,但仍有如下几点区别:table
::first-line
和 ::first-letter
这两种伪元素vertical-align
对 Flexbox
中的子元素 是没有效果的float
和 clear
属性对 Flexbox
中的子元素是没有效果的,也不会使子元素脱离文档流(可是对Flexbox
是有效果的!)column-*
) 在 Flexbox
中也是失效的,就是说咱们不能使用多栏布局在 Flexbox
排列其下的子元素Flexbox
下的子元素不会继承父级容器的宽