1. 程式人生 > >淺析css中的BFC、IFC、GFC和FFC

淺析css中的BFC、IFC、GFC和FFC

FC的全稱是:Formatting Contexts,是W3C CSS2.1規範中的一個概念。它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關係和相互作用。

FC一共包含BFC、IFC、GFC 、FFC四種類型。CSS2.1規範中只有BFC、IFC。CSS3推出GFC、FFC兩種新型別。

BFC

BFC(Block Formatting Contexts)直譯為"塊級格式化上下文"。Block Formatting Contexts就是頁面上的一個隔離的渲染區域,容器裡面的子元素不會在佈局上影響到外面的元素,反之也是如此。

BFC有一下特性:

  1. 內部的Box會在垂直方向,從頂部開始一個接一個地放置。

  2. Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生疊加

  3. 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。

  4. BFC的區域不會與float box疊加。

  5. BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素,反之亦然。

  6. 計算BFC的高度時,浮動元素也參與計算。

如何產生BFC?

float的值不為none。 

overflow的值不為visible。 

position的值不為relative和static。

display的值為table-cell, table-caption, inline-block中的任何一個。 

那BFC一般有什麼用呢?比如常見的多欄佈局,結合塊級別元素浮動,裡面的元素則是在一個相對隔離的環境裡執行。

IFC

IFC(Inline Formatting Contexts)直譯為"內聯格式化上下文",IFC的line box(線框)高度由其包含行內元素中最高的實際高度計算而來(不受到豎直方向的padding/margin影響)。

IFC有一下特性:

1.IFC中的line box一般左右都貼緊整個IFC,但是會因為float元素而擾亂。float元素會位於IFC與與line box之間,使得line box寬度縮短。 

2. 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有點兒類似,但仍有以下幾點區別:

  • Flexbox 不支援 ::first-line 和 ::first-letter 這兩種偽元素

  • vertical-align 對 Flexbox 中的子元素 是沒有效果的

  • float 和 clear 屬性對 Flexbox 中的子元素是沒有效果的,也不會使子元素脫離文件流(但是對Flexbox 是有效果的!)

  • 多欄佈局(column-*) 在 Flexbox 中也是失效的,就是說我們不能使用多欄佈局在Flexbox 排列其下的子元素

  • Flexbox 下的子元素不會繼承父級容器的寬

相關推薦

css布局的各種FC簡單介紹:BFCIFCGFCFFC

都是 成了 context 組成 它的 改變 div 區別 ddl 什麽是FC? Formatting Context,格式化上下文,指頁面中一個渲染區域,擁有一套渲染規則,它決定了其子元素如何定位,以及與其他元素的相互關系和作用。 BFC 什麽是BFC Block For

淺析cssBFCIFCGFCFFC

FC的全稱是:Formatting Contexts,是W3C CSS2.1規範中的一個概念。它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關係和相互作用。 FC一共包含BFC、IFC、GFC 、FFC四種類型。CSS2.

css佈局的各種FC(BFCIFCGFCFFC

什麼是FC?FC(Formatting Context)格式化上下文,其實指的是一個渲染區域,擁有一套渲染規則,它決定了其子元素如何定位,以及與其他元素之間的關係和相互作用。什麼是BFC? BFC(Block Formatting Context)塊級格式化上下文,指的是一個獨立的塊級渲染區域,擁有一套獨立

什麽是BFCIFCGFCFFC

不同 其中 none cal line w3c ive idl fin 什麽是BFC、IFC、GFC和FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC。 FC的全稱是:Formatting Contexts,是W3C CSS2.1規範中的一個概念。它

學習BFCIFCFFCGFC

rect ade posit 包含 水平 not -h font 簡單的   FC(Formatting Context)格式化內容,常見的FC有BFC、IFC、FFC、GFC四種類型,BFC和IFC是W3C CSS2.1規範提出的概念,FFC和GFC是W3C CSS3規範

理解BFCIFCGFCFFC

什麼是fc? FC的全稱是:Formatting Contexts,是W3C CSS2.1規範中的一個概念。它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關係和相互作用。 BFC Block Formatti

CSS BFC,IFC,GFCFFC

原文網址:http://www.cnblogs.com/dingyufenglian/p/4845477.html   What‘s FC? 一定不是KFC,FC的全稱是:Formatting Contexts,是W3C CSS2.1規範中的一個概念。它是頁面中的一塊渲染區域,並且

小科普:到底什麼是BFCIFCGFCFFC,次奧?

軟體開發的一般被稱為民工,搞前端的,有人形容為是掏糞工,說白了連民工級別高都沒有。說直接點就是個製作介面的,注意,連設計介面的都算不上,一般前端都是拿著設計稿去照這樣子開發的。 說這些無非是覺得前端前端,卻一點也不高階啊,就連逼格高的術語都找不到幾個,但少不代表沒有,比

盒子模型IFCBFCCollapsing margins

針對 page bfc 目標 排列 結構 then lba def 前言                                 盒子模型作為CSS基礎中的基礎,曾一度以為掌握了IE和W3C標準下的塊級盒子模型即可,但近日在學習行級盒子模型時發現原來當初是如此幼稚

淺析C++的開啟檔案儲存檔案(OPENFILENAME)

首先看看msdn上如何描述的: Contains information that the GetOpenFileName and GetSaveFileName functions use to initialize an Open or Save As dialog box

詳解CSSclear屬性bothleftright值的含義

clear的值有四個 none:允許兩邊都可以有浮動物件; both:不允許有浮動物件; left:不允許左邊有浮動物件; right:不允許右邊有浮動物件。 老實說,我沒真正理解字面上的意思,因為這幾段話是有歧義的,例如clear:right的解釋是“不允許右邊有浮動物件

揭開CSSBFC的面紗

div contex tin 一個 總結 是我 c中 分享圖片 left 引言: 這篇文章是我對BFC的理解及總結,帶你揭開BFC的面紗。你將會知道BFC是什麽,形成BFC的條件,BFC的相關特性,以及他的實際應用。 一、何為BFC BFC(Block For

CSSBFC的應用

前言 說起BFC,一些不熟悉的童鞋往往會有兩種情況:1. 用了BFC但是不知道有這回事,2.請教過大佬聽過BFC大名然後CV了一段overflow: hidden解決了問題然後不刨根問底,筆者曾經也是其中的一員。思維不清晰腫麼辦?問谷歌娘唄~看了好多文章,知

淺析 CSS 的邊距重疊

淺析 CSS 中的邊距重疊 邊距重疊是什麼 在說邊距重疊之前,先以正常的思維來考慮如果你現在是瀏覽器引擎遇到這種情況應該怎麼辦? 現在有兩個元素 div1 和 div2 緊挨著,中間沒有它元素,它們的外邊距就會發生重疊。div1 在左,div2 在右,div1 的 margin-left 為 20px, di

css的rem的使用例項要義說明

<html> <head> <style> html { font-size: 0.625; /*根元素預設的大小是16p

CSS選擇器以及偽類偽元素選擇器

3.5結構選擇器 (1)後代選擇器:可以選擇一個元素的後代元素,這個後代元素包括兒子,孫子,以及後代結構。 <<style type="text/css">         .content a{             font-size: 25px;

淺析C#單點登入的原理使用

是單點登入? 我想肯定有一部分人“望文生義”的認為單點登入就是一個使用者只能在一處登入,其實這是錯誤的理解(我記得我第一次也是這麼理解的)。 單點登入指的是多個子系統只需要登入一個,其他系統不需要登入了(一個瀏覽器內)。一個子系統退出,其他子系統也全部是退出狀態。 如果你還是不明白,我們舉個實際的例子把。

cssabsolute使用,用positiontransform是div裡面的div垂直居中

        我以前看的一本書上是這麼寫的如果一個div的position屬性為absolute那麼這個div不會受頁面的其他元素影響,直接基於頁面定位這是錯誤的。看w3c,用google查posi

css 的背景圖片小技巧存在的坑

本文轉載於:猿2048網站➜css 中的背景圖片小技巧和存在的坑 body 的背景圖設定   第一種 :這種情況下背

CSS】淺談css格式化上下文BFCIFC(二)

Inline Formatting Context Inline Formatting Context的縮寫就是IFC。中文名叫,行內格式化上下文。行內框參與IFC。 什麼是行框? 在IFC中,每個框都是一個接一個地水平排列,起點是包含塊的頂部,水平方向