task0001第六部分之BFC,IFC

FC

之前在兩列布局的筆記裏面寫了有關BFC的理解,但是還有很多FC啊,什麼IFC,GFC,FFC(後兩個CSS3中引入)
那它們共同點就是…都有個FC,FC是什麼呢…..
FC呢就是Formatting context,format就是安排…的格局,排版,使…格式化的意思,context呢就是語境,上下文,背景,環境的意思。
那所以它的意思就是安排排版環境…其實剛開始看到格式化上下文……我也只能理解出手機U盤格式化的意思…
安排排版環境我覺得對我個人而言,相對…..通俗一點吧。
那BFC呢就是給塊級元素安排個排版環境,IFC呢就是給內聯元素安排…..
那可以不可以這樣說,把各種BFC啊IFC啊等等的,想象成一個組織,加入它們的組織是有條件的,滿足了這個條件就能進入這個組織,也就是說觸發了某FC。那每個不同的FC都有着各自的規矩,也就是它們的排版規則。
http://www.w3help.org/zh-cn/kb/010/
關於上面FC這篇講解得比較專業。

BFC

在我的這http://blog.csdn.net/u014106213/article/details/52659086 我引用了一位前輩的關於BFC的講解部分,這位前輩寫的關於BFC的內容挺不錯的,看完大概能清楚BFC了。

IFC

首先是IFC的觸發條件:

display 屬性爲 inline, inline-block, inline-table 的元素,會生成 inline-level box。並且參與 inline formatting context;

具體的內容,網上找了一圈,看到的似懂非懂,於是…….
https://www.w3.org/TR/CSS2/visuren.html#inline-foirmatting
於是只能結合翻譯..有道啥的,自己再根據理解翻譯意思…..
以下…是我結合後的翻譯….

IFC的主要規則是下面加粗的一段:

在內聯格式設置上下文中:盒子(元素)從一個包含塊的頂部開始一個接一個水平放置。盒子之間的——水平方向的外邊距margin、border、padding值都遵守默認規律。盒子可以以不同的方式垂直排列:盒子的底部或頂部可以對齊,或在其文本的基線可對準。包含形成一行的框的矩形區域被稱爲線框,line box。

以下的內容…可以瞭解瞭解吧…雖然翻譯完也覺得不是很通順
給這個span元素加了個border……可以看到個紅色的框框,不知道和這個line-box是不是重合的。
這裏寫圖片描述

line box的寬度由包含塊和浮動元素的存在所決定。

這個根據包含塊應該是指寬度適應裏面包含的元素,而浮動元素呢就是說,如果加了浮動之後,元素之間會沒有間隙,那麼寬度又改變了

line box的高度由line box高度計算中給出的規則確定。

line box高度總是足夠包含它所有的盒子。無論如何,它會比它包含的最高的盒子高(如果,例如,盒子是對齊的,那麼會導致基準線會向上)。當B盒子的高度小於包含它的線框的高度時,在線框內的B的垂直對齊是由“垂直對齊”屬性決定的。比如vertical-align: middle;這個屬性

當幾個內聯級別框在一個line box內水平放置不下時,它們分佈在兩個或多個垂直堆疊的line box中

這就是說像文字一樣折行嘛…….

因此,一個段落是一個垂直堆棧的line box。line box是沒有垂直分離的堆疊(除了指定的其他地方),他們從來不會重疊。

在一般情況下,一個line box的左邊緣接觸其包含塊的左邊緣,右邊緣接觸其包含塊的右邊緣。然而,浮動元素可能會出現在包含塊邊緣和line box邊緣之間的。因此,雖然在相同的內聯格式上下文中的line box一般具有相同的寬度(包含塊的寬度),但如果可用的水平空間被減少,它們可能會因寬度的變化而有所不同。相同的內聯格式上下文中的line box一般在高度上有所不同(例如,一行可能包含一個高的圖像,而其他的行則只包含文本)。

當行上的內聯級框的總寬度小於包含它們的line box的寬度時,line box內的它們的水平分佈是由“text-align”屬性決定的。如果該屬性具有“justify”的值,用戶代理可以在內聯框中使空間和單詞拉伸(但 inline-table和inline-block boxes不會)。

當內聯框超過line box的寬度時,它被拆分成多個框,這些框被分佈在多個line box中。如果一個內聯盒子不能分割(例如,如果內聯盒子包含一個字符,或特定的語言文字規則不允許有間隔,或者被’white-space’的’nowrap’和’pre’影響),那麼內聯盒子溢line box。

當一個內聯框被分割時,在分割的地方margin,border和padding都沒有視覺效果。

由於雙向的文本處理,內聯框也可以在同一行框內被拆分成幾個框。

http://www.w3help.org/zh-cn/kb/010/ 這篇文章講了一些關於分割和對齊的內容。

line box被構造的意義是爲了在觸發了IFC的地方控制內聯元素的排版。它不包含文字,不包含預設空白,不包括設置值爲非零的margin,非零的padding,非零的border的內聯元素,並不包含其他的處於文檔流中的內聯元素(如圖像、內聯塊 inline blocks或內聯表inline tables),而且結尾的時候不會換行。line box爲了確定它任何包含的元素所在的位置需要被認爲是零高度的,爲了其他某些原因,它需要被認爲是虛構的。

以上一大堆…..
http://www.xiaomeiti.com/note/3608中總結得很精煉

BFC和IFC都是CSS2中的概念,在CSS3中還提出了FFC和GFC…上面那個鏈接都簡單介紹了一下這四個FC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章