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
下的子元素不會繼承父級容器的寬