BFC、IFC、FFC的概念和應用

一、 BFC的概念和應用

1. BFC的概念

BFC的全稱是 Block Formatting Contexts,塊級格式化上下文,是頁面中的一塊渲染區(qū)域,他擁有一套渲染規(guī)則,決定內部的子元素如何定位,以及和其他元素的關系和相互作用。說白了就是一個決定如何渲染元素的容器。

2. BFC的渲染規(guī)則
  1. 內部的塊級元素會再垂直方向一個接一個的放置
  2. 塊級元素垂直方向的距離由margin決定,屬于同一個BFC的兩個相鄰塊級元素的margin會發(fā)生重疊
  3. 對于從左往右的格式化,每個元素(塊級元素與行內元素)的左邊緣,與包含塊的左邊緣相接觸,(對于從右往左的格式化則相反)。即使包含塊中的元素存在浮動也是如此,除非其中元素再生成一個BFC。
  4. BFC的區(qū)域不會與浮動元素重疊
    這點是BFC最重要的一點渲染規(guī)則,可以用這個規(guī)則解決很多布局的問題。
  5. BFC是一個隔離的獨立容器,容器里面的子元素和外面的元素互不影響。
  6. 計算BFC容器的高度時,浮動元素也參與計算。
    這個規(guī)則,可以用來解決內部元素浮動,導致父級元素的高度坍塌問題。
3. BFC的觸發(fā)條件
  • 根元素
  • flloat的值不是none
  • position的值不是staticrelative
  • display的值是inline-block、inline-flex、flex、flow-root、table-caption、table-cell
  • overflow的值不是visible
4. BFC的應用
  • 清除浮動
    根據(jù)BFC的渲染規(guī)則第6點(計算BFC容器的高度時,浮動元素也參與計算)來清除浮動,解決高度坍塌的問題。
  • 解決上下margin邊距重疊問題
    利用BFC渲染規(guī)則第2點(屬于同一個BFC的兩個相鄰塊級元素的margin會發(fā)生重疊),那么不屬于同一個BFC的兩個相鄰塊級元素的margin就不會發(fā)生重疊。
  • 實現(xiàn)自適應兩欄布局
<style>
    .main{
        background: red;
        height:500px;
    }
    .sider {
        float: left;
        width: 20%;
        height:300px;
        background: blue;
    }
</stley>
<body>
    <div class="sider">我是側邊欄</div>
    <div class="main">我是主體內容</div>
<body>
image.png

首先我們根據(jù)規(guī)則1,要先把.sider div寫在.main div前面。這個.sider div才會浮動起來覆蓋在.main div上面。
再根據(jù)規(guī)則4(BFC的區(qū)域不會與浮動元素重疊),給.main加上overflow:auto;觸發(fā).main div生成BFC。


image.png

二、 IFC的概念和應用

1、IFC的概念

IFC的全稱是Inline Formatting Contexts,也就是“內聯(lián)格式化上下文”。

2、IFC的生成條件:

IFC的生成條件非常簡單,就是塊級元素內僅包含內聯(lián)元素。
需要注意的是當IFC中有塊級元素插入時,會產生兩個匿名塊將父元素分割開來,產生兩個IFC。

3.IFC的渲染規(guī)則:
  • 子元素水平方向橫向排列,并且垂直方向起點為元素頂部。
  • 子元素只會計算橫向樣式空間,【padding、border、margin】,垂直方向樣式空間不會被計算,【padding、border、margin】。
  • 在垂直方向上,子元素可以不同形式對齊(vertical-align)
  • 能把在一行上的框都完全包含進去的一個矩形區(qū)域,被稱為該行的行框(line box)。行框的寬度是由包含塊(containing box)和與其中的浮動元素來決定。
  • IFC中的“l(fā)ine box”一般左右邊貼緊其包含塊,但float元素會優(yōu)先排列。
  • IFC中的“l(fā)ine box”高度由 CSS 行高計算規(guī)則來確定,同個IFC下的多個line box高度可能會不同。
  • 當 inline-level boxes的總寬度少于包含它們的line box時,其水平渲染規(guī)則由 text-align 屬性值來決定。
  • 當一個“inline box”超過父元素的寬度時,它會被分割成多個boxes,這些 boxes 分布在多個“l(fā)ine box”中。如果子元素未設置強制換行的情況下,“inline box”將不可被分割,將會溢出父元素。
4. IFC的應用
  • 水平居中,當一個塊要在當前環(huán)境水平居中,設置display:inline-block,會在外層生成一個IFC,通過設置text-align:center既可使其居中
  • 垂直居中,創(chuàng)建一個IFC,用其中一個元素撐開高度,然后設置其vertical-align:middle,其他行內元素則可以在此父元素下垂直居中。

三、FFC的概念和應用

1. FFC全稱是 Flex formatting contexts,彈性盒模型
2. FFC的生成條件

父級元素設置display:flex或者display:inline-flex

3. 渲染規(guī)則:

菜鳥教程詳解
ps: 生成FFC后,其子元素的float、clear和vertical-align屬性將失效。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380