首頁  >  文章  >  web前端  >  CSS裡的BFC和IFC的用法實例分析

CSS裡的BFC和IFC的用法實例分析

小云云
小云云原創
2018-02-02 10:44:381762瀏覽

之前一直聽到有人提到 CSS裡的BFC,正巧在 IFE的練習裡遇到了外邊距折疊的問題,所以剛好弄清楚BFC的機制。 (參考來源 見文末的 Reference)

本文主要和大家介紹CSS裡的BFC和IFC的用法的相關資料,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

一 什麼是 BFC

和之前所有博文一樣,還是先從What的角度開始介紹,由淺入深的理解BFC。

所謂的 Formatting context(格式化上下文), 它是 W3C CSS2.1 規格中的一個概念。

它是頁面中的一塊渲染區域,並且有一套渲染規則.

它決定了其子元素將如何定位,以及和其他元素的關係和相互作用。

而 Block Formatting Contexts (BFC,區塊級格式化上下文),就是 一個區塊級元素 的渲染顯示規則。通俗一點講,可以把 BFC 理解為一個封閉的大箱子,,容器裡面的子元素不會影響到外面的元素,反之也如此。

BFC的佈局規則如下:

1 內部的盒子會在垂直方向,一個個放置;
2 BFC是頁面上的一個隔離的獨立容器;
3 屬於同一個BFC的兩個相鄰Box的上下margin會發生重疊;
4 計算BFC的高度時,浮動元素也參與計算
5 每個元素的左邊,與包含的盒子的左邊相接觸,即使存在浮動也是如此;
6 BFC的區域不會與float重疊;

那麼如何觸發BFC呢?只要元素滿足下面任一條件即可觸發BFC 特性:

  1. ##body 根元素;

  2. 浮動元素:float 不為none的屬性值;

  3. 絕對定位元素:position (absolute、fixed)

  4. display為: inline-block、table-cells、flex

  5. overflow 除了visible以外的值(hidden、auto、scroll)

二BFC的特性及應用

接下來介紹BFC常見的特性和應用,這一部分在解釋原因時,會用到上文的佈局規則和觸發條件,所以需要注意一下。

1 兩個相鄰的普通流中的區塊元素垂直方向上的margin會折疊

<head>
.p {  
  width:200px;  
  height:50px;  
  margin:50px 0;  
  background-color:red;  
}  
</head>

<body>
   <p class="p"></p>  
   <p class="p"></p>  
</body>
效果圖是:

# #根據BFC規則的第3條:

盒子垂直方向的距離由margin決定,

#屬於同一個BFC的+ 兩個相鄰Box的+ 上下margin 會發生重疊。

上文的例子之所以發生外邊距折疊,是因為他們同屬於body這個根元素, 所以我們需要讓它們不屬於同一個BFC,就能避免外邊距折疊:

<p class="p"></p>  
<p class="wrap">  
  <p class="p"></p>  
</p>
.wrap {  
  overflow:hidden;  

.p {  
  width:200px;  
  height:50px;  
  margin:50px 0;  
  background-color:red;

效果圖是:

2 BFC可以包含浮動的元素(清除浮動)

#正常情況下,浮動的元素會脫離普通文件流,所以下面的程式碼裡:

<p style="border: 1px solid #000;">
    <p style="width: 50px; height: 50px; background: #eee;
               float: left;">
    </p>
</p>

外層的p會無法包含內部浮動的p,效果請見下圖:

但如果我們觸發外部容器的BFC,根據BFC規格中的第4條:計算BFC的高度時,浮動元素也參與計算,那麼外部p容器就可以包覆浮動元素,所以只要把程式碼修改如下:

<p style="border: 1px solid #000;overflow: hidden">
    <p style="width: 100px;height: 100px;background: #eee;float: left;"></p>
</p>

就可以完成以下效果:

3 BFC可以阻止元素被浮動元素覆蓋

先看一個例子:

<p class="aside"></p>  
<p class="main"></p>  

p {  
  width:300px;  
}  
.aside {  
  width: 100px;  
  height: 150px;  
  float: left;  
  background: black;  
}  
.main {  
  height:200px;  
  background-color:red;  
}

效果圖是:

之所以是這樣,是因為上文的規則5: 每個元素的左邊,與包含的盒子的左邊相接觸,即使存在浮動也是如此;

所以要改變效果,使其互補幹擾,就得利用規則6 :BFC的區域不會與float重疊,讓

也能觸發BFC的性質,即:

.main {  
  overflow:hidden;  
  height:200px;  
  background-color:red;  
}

透過這種方法,就能用來實現兩列的自適應佈局。

三 簡單介紹IFC

IFC佈局規則:

1 框會從包含區塊的頂部開始,一個接一個地水平擺放。

2 擺放這些框時,它們在水平方向的內外邊距+邊框所佔用的空間都會被考慮;在垂直方向上,這些框可能會以不同形式來對齊:水平的margin、 padding、border有效,垂直無效。不能指定寬高;

3 行框的寬度是 由包含區塊和存在的浮動決定;行框的高度 由行高來決定。

相關推薦:


關於CSS中重要的BFC詳解

關於BFC與高度塌陷的問題

什麼是BFC?對bfc的簡單理解

以上是CSS裡的BFC和IFC的用法實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn