CSS中的各种FC
什么是FC?
Formatting Context,格式化上下文,指頁面中一個渲染區域,擁有一套渲染規則,它決定了其子元素如何定位,以及與其他元素的相互關系和作用。
BFC
什么是BFC
Block Formatting Context,塊級格式化上下文,一個獨立的塊級渲染區域,該區域擁有一套渲染規則來約束塊級盒子的布局,且與區域外部無關。
BFC的約束規則
BFC的應用
- 防止margin發生重疊
- 防止發生因浮動導致的高度塌陷
怎么生成BFC
- float的值不為none;
- overflow的值不為visible;
- display的值為inline-block、table-cell、table-caption;
- position的值為absolute或fixed;
display:table也認為可以生成BFC?其實是在于Table會默認生成一個匿名的table-cell,正是這個匿名的table-cell生成了BFC。
IFC
什么是IFC
IFC(Inline Formatting Contexts)直譯為"行內格式化上下文",IFC的line box(線框)高度由其包含行內元素中最高的實際高度計算而來(不受到豎直方向的padding/margin影響)
IFC有的特性
IFC中的line box一般左右都貼緊整個IFC,但是會因為float元素而擾亂。float元素會位于IFC與與line box之間,使得line box寬度縮短。
IFC中時不可能有塊級元素的,當插入塊級元素時(如p中插入div)會產生兩個匿名塊與div分隔開,即產生兩個IFC,每個IFC對外表現為塊級元素,與div垂直排列。
IFC的應用
水平居中:當一個塊要在環境中水平居中時,設置其為inline-block則會在外層產生IFC,通過text-align則可以使其水平居中。
垂直居中:創建一個IFC,用其中一個元素撐開父元素的高度,然后設置其vertical-align:middle,其他行內元素則可以在此父元素下垂直居中。
GFC
GFC(GridLayout Formatting Contexts)直譯為"網格布局格式化上下文",當為一個元素設置display值為grid的時候,此元素將會獲得一個獨立的渲染區域,我們可以通過在網格容器(grid container)上定義網格定義行(grid definition rows)和網格定義列(grid definition columns)屬性各在網格項目(grid item)上定義網格行(grid row)和網格列(grid columns)為每一個網格項目(grid item)定義位置和空間。
GFC將改變傳統的布局模式,他將讓布局從一維布局變成了二維布局。簡單的說,有了GFC之后,布局不再局限于單個維度了。這個時候你要實現類似九宮格,拼圖之類的布局效果顯得格外的容易。
FFC
FFC(Flex Formatting Contexts)直譯為"自適應格式化上下文",display值為flex或者inline-flex的元素將會生成自適應容器(flex container)。
Flex Box 由伸縮容器和伸縮項目組成。通過設置元素的 display 屬性為 flex 或 inline-flex 可以得到一個伸縮容器。設置為 flex 的容器被渲染為一個塊級元素,而設置為 inline-flex 的容器則渲染為一個行內元素。
伸縮容器中的每一個子元素都是一個伸縮項目。伸縮項目可以是任意數量的。伸縮容器外和伸縮項目內的一切元素都不受影響。簡單地說,Flexbox 定義了伸縮容器內伸縮項目該如何布局。
FFC與BFC的區別
FFC與BFC有點兒類似,但仍有以下幾點區別:
Flexbox 不支持 ::first-line 和 ::first-letter 這兩種偽元素
vertical-align 對 Flexbox 中的子元素 是沒有效果的
float 和 clear 屬性對 Flexbox 中的子元素是沒有效果的,也不會使子元素脫離文檔流(但是對Flexbox 是有效果的!)
多欄布局(column-*) 在 Flexbox 中也是失效的,就是說我們不能使用多欄布局在Flexbox 排列其下的子元素
Flexbox 下的子元素不會繼承父級容器的寬
更多專業前端知識,請上 【猿2048】www.mk2048.com
總結
- 上一篇: js,jq.事件代理(事件委托)复习。
- 下一篇: 编写高质量的代码--基础:结构和样式,行