學習BFC與IFC

genetalks_大資料發表於2019-04-04

簡介

理解CSS中的BFC與IFC,使你對CSS佈局更加得心應手。

什麼是BFC

BFC(Block Formatting Context)英文直譯:塊級格式化上下文。BFC形成一個單獨的區塊,BFC裡面的元素不會影響BFC區塊之外的元素或區塊,反之,BFC區塊之外的元素不會影響BFC內的元素。

BFC的形成

以下元素會形成BFC:

  • float 的值不為 none
  • position 的值不為 static 或 relative
  • overflow 的值不為 visibility
  • display 的值為 table-cell、table-caption、inline-block、flex 或 inline-flex

BFC的特性

1.在BFC內部,塊級元素會垂直排列,兩個相鄰的塊級元素margin-bottom、margin-top會互相影響,margin值取較大的那一個。padding值不受影響。 在BFC內部,相鄰兩個塊級元素的距離 “距離” = (margin-bottom、margin-top)中較大的那一個。

2.在BFC內部,塊級元素的左邊以包含塊(BFC)的左邊界為起點。

3.在BFC內部,行級元素會水平排列,兩個相鄰的行級元素margin-left、margin-right、padding-left、padding-right都不會受影響,會發揮它們應有的功效。margin-top、margin-bottom不起作用,沒有相應的效果。相鄰兩個行級元素的距離 “距離” = “padding-right” + “padding-left”。

(如果不清楚行級元素、塊級元素的,請參考:www.cnblogs.com/Bobo999/p/5…)

BFC示例

html程式碼 {% asset_img code-html.png html image%}

css程式碼 {% asset_img code-css.png css image%}

效果程式碼 {% asset_img example2.png view image%} {% asset_img example1.png view image%}

什麼是IFC

內部的元素從包含塊的頂部開始,從左至右(預設)排列成一行形成的一個矩形盒子叫做line box。

IFC的特性

1.line box的寬度由浮動情況和它的包含塊決定。 2.line box的高度由line-height的計算結果決定。 3.line box從左至右排列成一行形成一個line box如果不能一行排列,可能會生成多個垂直疊加的line box。Line boxs被疊加沒4.有垂直方向上的分離(特殊情況除外),並且他們也不重疊。 通常line box的左邊緣挨著包含塊的左邊緣,右邊緣挨著包含快的右邊緣。 5.當在一行中行內級盒子的總寬度比包含他們的line box的寬度小,他們的在line box中的水平放置位置由'text align'屬性決定。 6.當一個行內盒子超過了line box的寬度,則它被分割成幾個盒子並且這些盒子被分配成幾個橫穿過的line boxs。如果一個行內盒子不能被分割。則行內盒子溢位line box。

示例

html 程式碼 {% asset_img line-box-code.png line-box-code image%} 會產生五個line box

  • 匿名 : 'Several'
  • em : 'emphasized words'
  • 匿名 : 'appear'
  • strong : 'in this'
  • 匿名 : 'sentence, dear'

效果圖 {% asset_img line-box-view.png line-box-view image%}

參考文獻

segmentfault.com/a/119000000… www.w3cplus.com/css/underst…


作者資訊:寧文飛,人和未來大資料前端工程師