首頁 > web前端 > css教學 > CSS BFC原理及其應用詳解

CSS BFC原理及其應用詳解

小云云
發布: 2018-02-03 09:48:40
原創
1890 人瀏覽過

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

一、常見定位方案

在講BFC 之前,我們先來了解常見的定位方案,定位方案是控制元素的佈局,有三種常見方案:

普通流(normal flow)

在普通流中,元素按照其在HTML 中的先後位置至上而下佈局,在這個過程中,行內元素水平排列,直到當行被佔滿然後換行,區塊級元素則會被渲染為完整的一個新行,除非另外指定,否則所有元素預設都是普通流定位,也可以說,普通流中元素的位置由該元素在HTML 文件中的位置決定。

浮動(float)

在浮動佈局中,元素首先按照普通流的位置出現,然後根據浮動的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環繞相似。

絕對定位(absolute positioning)

在絕對定位佈局中,元素會整體脫離普通流,因此絕對定位元素不會對其兄弟元素造成影響,而元素具體的位置由絕對定位的座標決定。

二、BFC 概念

Formatting context(格式化上下文) 是 W3C CSS2.1 規格中的一個概念。它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及與其他元素的關係和相互作用。

那麼 BFC 是什麼呢?

BFC 即 Block Formatting Contexts (區塊級格式化上下文),它屬於上述定位方案的普通流。

具有 BFC 特性的元素可以看作是隔離了的獨立容器,容器裡面的元素不會在佈局上影響到外面的元素,並且 BFC 具有普通容器所沒有的一些特性。

通俗一點來講,可以把 BFC 理解為一個封閉的大箱子,箱子內部的元素無論如何翻江倒海,都不會影響到外部。

三、觸發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特性與應用

1. 同一個BFC 下外邊距會發生摺疊

<head>
p{
    width: 100px;
    height: 100px;
    background: lightblue;
    margin: 100px;
}
</head>
<body>
    <p></p>
    <p></p>
</body>
登入後複製

從效果來看,因為兩個p 元素都處於同一個BFC 容器下(這裡指body 元素) 所以第一個p 的下邊距和第二個p 的上邊距發生了重疊,所以兩個盒子之間距離只有100px,而不是200px。

首先這不是 CSS 的 bug,我們可以理解為一種規範,如果想要避免外邊距的重疊,可以放在不同的 BFC 容器中。

<p class="container">
    <p></p>
</p>
<p class="container">
    <p></p>
</p>
登入後複製
.container {
    overflow: hidden;
}
p {
    width: 100px;
    height: 100px;
    background: lightblue;
    margin: 100px;
}
登入後複製
這時候,兩個盒子邊距就變成了200px

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

我們都知道,浮動的元素會脫離普通文檔流,來看下下面一個例子

<p style="border: 1px solid #000;">
    <p style="width: 100px;height: 100px;background: #eee;float: left;"></p>
</p>
登入後複製

#由於容器內元素浮動,脫離了文檔流,所以容器只剩下2px 的邊距高度。如果使觸發容器的 BFC,那麼容器將會包裹著浮動元素。

<p style="border: 1px solid #000;overflow: hidden">
    <p style="width: 100px;height: 100px;background: #eee;float: left;"></p>
</p>
登入後複製
效果如圖:

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

先來看一個文字環繞效果:

<p style="height: 100px;width: 100px;float: left;background: lightblue">我是一个左浮动的元素</p>
<p style="width: 200px; height: 200px;background: #eee">我是一个没有设置浮动, 
也没有触发 BFC 元素, width: 200px; height:200px; background: #eee;</p>
登入後複製

這時候其實第二個元素有部分被浮動元素所覆蓋,(但是文字訊息不會被浮動元素所覆蓋) 如果想避免元素被覆蓋,可觸第二個元素的BFC 特性,在第二個元素中加入overflow: hidden,就會變成:

這個方法可以用來實作兩列自適應佈局,效果不錯,這時候左邊的寬度固定,右邊的內容自適應寬度(去掉上面右邊內容的寬度)。

相關推薦:


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

關於CSS中重要的BFC詳解

關於BFC與高度塌陷的問題

以上是CSS BFC原理及其應用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板