最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

CSSBFC原理及其應(yīng)用詳解

來(lái)源:懂視網(wǎng) 責(zé)編:小OO 時(shí)間:2020-11-27 18:49:19
文檔

CSSBFC原理及其應(yīng)用詳解

一、常見(jiàn)定位方案;在講 BFC 之前,我們先來(lái)了解一下常見(jiàn)的定位方案,定位方案是控制元素的布局,有三種常見(jiàn)方案。普通流 (normal flow)。在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在這個(gè)過(guò)程中,行內(nèi)元素水平排列,直到當(dāng)行被占滿(mǎn)然后換行,塊級(jí)元素則會(huì)被渲染為完整的一個(gè)新行,除非另外指定,否則所有元素默認(rèn)都是普通流定位,也可以說(shuō),普通流中元素的位置由該元素在 HTML 文檔中的位置決定。浮動(dòng) (float)。在浮動(dòng)布局中,元素首先按照普通流的位置出現(xiàn),然后根據(jù)浮動(dòng)的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環(huán)繞相似。絕對(duì)定位 (absolute positioning)。
推薦度:
導(dǎo)讀一、常見(jiàn)定位方案;在講 BFC 之前,我們先來(lái)了解一下常見(jiàn)的定位方案,定位方案是控制元素的布局,有三種常見(jiàn)方案。普通流 (normal flow)。在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在這個(gè)過(guò)程中,行內(nèi)元素水平排列,直到當(dāng)行被占滿(mǎn)然后換行,塊級(jí)元素則會(huì)被渲染為完整的一個(gè)新行,除非另外指定,否則所有元素默認(rèn)都是普通流定位,也可以說(shuō),普通流中元素的位置由該元素在 HTML 文檔中的位置決定。浮動(dòng) (float)。在浮動(dòng)布局中,元素首先按照普通流的位置出現(xiàn),然后根據(jù)浮動(dòng)的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環(huán)繞相似。絕對(duì)定位 (absolute positioning)。
本文主要和大家介紹10分鐘理解BFC原理及其應(yīng)用的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望能幫助到大家。

一、常見(jiàn)定位方案

在講 BFC 之前,我們先來(lái)了解一下常見(jiàn)的定位方案,定位方案是控制元素的布局,有三種常見(jiàn)方案:

普通流 (normal flow)

在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在這個(gè)過(guò)程中,行內(nèi)元素水平排列,直到當(dāng)行被占滿(mǎn)然后換行,塊級(jí)元素則會(huì)被渲染為完整的一個(gè)新行,除非另外指定,否則所有元素默認(rèn)都是普通流定位,也可以說(shuō),普通流中元素的位置由該元素在 HTML 文檔中的位置決定。

浮動(dòng) (float)

在浮動(dòng)布局中,元素首先按照普通流的位置出現(xiàn),然后根據(jù)浮動(dòng)的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環(huán)繞相似。

絕對(duì)定位 (absolute positioning)

在絕對(duì)定位布局中,元素會(huì)整體脫離普通流,因此絕對(duì)定位元素不會(huì)對(duì)其兄弟元素造成影響,而元素具體的位置由絕對(duì)定位的坐標(biāo)決定。

二、BFC 概念

Formatting context(格式化上下文) 是 W3C CSS2.1 規(guī)范中的一個(gè)概念。它是頁(yè)面中的一塊渲染區(qū)域,并且有一套渲染規(guī)則,它決定了其子元素將如何定位,以及和其他元素的關(guān)系和相互作用。

那么 BFC 是什么呢?

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

具有 BFC 特性的元素可以看作是隔離了的獨(dú)立容器,容器里面的元素不會(huì)在布局上影響到外面的元素,并且 BFC 具有普通容器所沒(méi)有的一些特性。

通俗一點(diǎn)來(lái)講,可以把 BFC 理解為一個(gè)封閉的大箱子,箱子內(nèi)部的元素?zé)o論如何翻江倒海,都不會(huì)影響到外部。

三、觸發(fā) BFC

只要元素滿(mǎn)足下面任一條件即可觸發(fā) BFC 特性:

  1. body 根元素

  2. 浮動(dòng)元素:float 除 none 以外的值

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

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

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

四、BFC 特性及應(yīng)用

1. 同一個(gè) BFC 下外邊距會(huì)發(fā)生折疊

<head>
p{
 width: 100px;
 height: 100px;
 background: lightblue;
 margin: 100px;
}
</head>
<body>
 <p></p>
 <p></p>
</body>

從效果上看,因?yàn)閮蓚€(gè) p 元素都處于同一個(gè) BFC 容器下 (這里指 body 元素) 所以第一個(gè) p 的下邊距和第二個(gè) p 的上邊距發(fā)生了重疊,所以?xún)蓚€(gè)盒子之間距離只有 100px,而不是 200px。

首先這不是 CSS 的 bug,我們可以理解為一種規(guī)范,如果想要避免外邊距的重疊,可以將其放在不同的 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;
}

這時(shí)候,兩個(gè)盒子邊距就變成了 200px

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

我們都知道,浮動(dòng)的元素會(huì)脫離普通文檔流,來(lái)看下下面一個(gè)例子

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

由于容器內(nèi)元素浮動(dòng),脫離了文檔流,所以容器只剩下 2px 的邊距高度。如果使觸發(fā)容器的 BFC,那么容器將會(huì)包裹著浮動(dòng)元素。

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

效果如圖:

3. BFC 可以阻止元素被浮動(dòng)元素覆蓋

先來(lái)看一個(gè)文字環(huán)繞效果:

<p style="height: 100px;width: 100px;float: left;background: lightblue">我是一個(gè)左浮動(dòng)的元素</p>
<p style="width: 200px; height: 200px;background: #eee">我是一個(gè)沒(méi)有設(shè)置浮動(dòng), 
也沒(méi)有觸發(fā) BFC 元素, width: 200px; height:200px; background: #eee;</p>

這時(shí)候其實(shí)第二個(gè)元素有部分被浮動(dòng)元素所覆蓋,(但是文本信息不會(huì)被浮動(dòng)元素所覆蓋) 如果想避免元素被覆蓋,可觸第二個(gè)元素的 BFC 特性,在第二個(gè)元素中加入 overflow: hidden,就會(huì)變成:

這個(gè)方法可以用來(lái)實(shí)現(xiàn)兩列自適應(yīng)布局,效果不錯(cuò),這時(shí)候左邊的寬度固定,右邊的內(nèi)容自適應(yīng)寬度(去掉上面右邊內(nèi)容的寬度)。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

CSSBFC原理及其應(yīng)用詳解

一、常見(jiàn)定位方案;在講 BFC 之前,我們先來(lái)了解一下常見(jiàn)的定位方案,定位方案是控制元素的布局,有三種常見(jiàn)方案。普通流 (normal flow)。在普通流中,元素按照其在 HTML 中的先后位置至上而下布局,在這個(gè)過(guò)程中,行內(nèi)元素水平排列,直到當(dāng)行被占滿(mǎn)然后換行,塊級(jí)元素則會(huì)被渲染為完整的一個(gè)新行,除非另外指定,否則所有元素默認(rèn)都是普通流定位,也可以說(shuō),普通流中元素的位置由該元素在 HTML 文檔中的位置決定。浮動(dòng) (float)。在浮動(dòng)布局中,元素首先按照普通流的位置出現(xiàn),然后根據(jù)浮動(dòng)的方向盡可能的向左邊或右邊偏移,其效果與印刷排版中的文本環(huán)繞相似。絕對(duì)定位 (absolute positioning)。
推薦度:
標(biāo)簽: 原理 應(yīng)用 講解
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top