談談CSS可視化格式模型的一些概念

jopen 9年前發布 | 11K 次閱讀 CSS 前端技術

1.有哪些概念

1.塊級元素(block-level element)和行內級元素(inline-level element)
2.塊級盒(blcok-level box)和行內級盒(inline-level box)
3.塊容器盒(block containing box)
4.塊盒(block box)和 行內盒(inline box)
5.包含塊(containing block)
6.塊級格式化上下文(bfc)和行內級格式化上下文(ifc)

2.元素類型

主要有塊元素和行內級元素,塊級元素表現為獨占一行,縱向排列,寬度自適應容器,display為block,list-item,table。
行內級元素表現為包裹性,對寬高不起作用,橫向排列,display為inline,inline-block,inline-table等,以及可替換元素,如img,button。

3.什么是塊級盒和行內級盒。

塊元素生成的盒,稱為主要塊級盒,參與bfc,行內級元素生成的盒為行內級盒,參與ifc。

4.什么是塊容器盒

塊容器盒,只包含塊級盒,或產生ifc,只包含行內級盒。但不能同時既有塊級盒又有行內級盒,如果有至少一個塊級盒,將只包含塊級盒,行內級盒將包含在生成的匿名塊盒中。
塊容器盒常見有p,div等塊級元素。非替換行內元素inline-block,table-cell也是塊容器。

5.什么是塊盒和行內盒

塊盒是哪些既是塊級盒同時又是塊容器盒的盒。如div,p。想display:table,雖然是塊級盒,但它不是快容器盒。可替換元素也不是塊容器盒,即使display為block。
行內盒指參與ifc的同時,也產生ifc的行內級盒。所有display:inline的非替換元素。
不產生ifc的行內級盒,一般稱為原子行內級盒(atomic inline-level box),主要有可替換行內元素或display為inline-block或inline-table。

6.什么是包含塊

不管什么盒,定位由包含塊決定。
談談CSS可視化格式模型的一些概念

7.bfc和ifc

bfc觸發方式有:
1.float不為none;
2.position為absolute或fixed.
3.display為inline-block、table-cell、table-caption、flex或inline-flex.
4.overflow不為visible.

bfc中塊級盒從包含塊頂部自上到下排列,在同一個bfc中相鄰的元素垂直方向會有margin collapse問題。
所謂相鄰指的是:

這兩個或多個外邊距沒有被非空內容、padding、border或clear分隔開。
注意例外情況:
1.浮動元素、inline-block元素、絕對定位元素的 margin 不會和垂直方向上其他元素的 margin 折疊

浮動元素的 margin 在垂直方向上也不會發生 margin 折疊,即使和它相鄰的子元素也不會。

<div style="margin-bottom:50px; width:50px; height:50px; background-color:green;">A</div>
    <div style="margin-top:50px; width:100px; height:100px; background-color:green; float:left;">
    <div style="margin-top:50px; background-color:gold;">B</div>
</div>

A

B
</div> </div>

2.創建了塊級格式化上下文1的元素,不和它的子元素發生 margin 折疊
以 “overflow : hidden” 的元素為例:

若 B 和它的 "overflow:hidden" 包含塊發生 margin 折疊的話,金色的條應該位于綠色塊的最上方,否則,沒有發生。

<div style="margin-top:50px; width:100px; height:100px; background-color:green; overflow:hidden;">
   <div style="margin-top:50px; background-color:gold;">B</div>
   </div>
</div>

B
</div> </div>

bfc作用:
1.阻止外邊距折疊
2.可以包含浮動元素
3.可以防止元素被浮動元素覆蓋

說白了,bfc的作用就是使元素與其他元素不在同一個上下文中,從而既不對外部產生影響,同時外部也不會影響到內部。

來自:http://www.cnblogs.com/sintao/p/4317760.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!