国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > CSS > 正文

淺談CSS潛藏著的BFC

2024-07-11 08:31:58
字體:
來源:轉載
供稿:網友

在寫樣式時,往往是添加了一個樣式,又或者是修改了某個屬性,就達到了我們的預期。

而BFC就潛藏在其中,當你修改樣式時,一不小心就能觸發它而毫無察覺,因此沒有意識到BFC的神奇之處。

一、什么是BFC(Block Formatting Context)

寫CSS樣式時,對一個元素設置css,我們首先要知道這個元素是塊級元素還是行內元素,而BFC就是用來格式化塊級盒子的。

Formatting Context:指頁面中一個渲染區域,并且擁有一套渲染規則,它決定了其子元素如何定位,以及與其他元素的相互關系和作用。

BFC定義:塊級格式化上下文,它是指一個獨立的塊級渲染區域,只有Block-level Box參與,該區域擁有一套渲染規則來約束塊級盒子的布局,且與區域外部無關。

二、BFC的生成

我們說到BFC是一塊渲染區域,那么這塊渲染區域到底在哪里呢,具體大小又是多少?這些都是由生成BFC的元素來決定的。

滿足下列CSS聲明之一的元素便會生成BFC:

1、根元素或其它包含它的元素

2、float的值不為none;

3、overflow的值不為visible;

4、position的值不為static;

5、display的值為inline-block、table-cell、table-caption;

6、flex boxes (元素的display: flex或inline-flex);

注:也有人認為display: table能生成BFC,我認為最主要原因是table會默認生成一個匿名的table-cell,正是這個匿名的table-cell生成了BFC。

三、BFC的布局規則

簡單歸納如下:

1、內部的元素會在垂直方向一個接一個地排列,可以理解為是BFC中的一個常規流

2、元素垂直方向的距離由margin決定,即屬于同一個BFC的兩個相鄰盒子的margin可能會發生重疊

3、每個元素的左外邊距與包含塊的左邊界相接觸(從左往右,否則相反),即使存在浮動也是如此,這說明BFC中的子元素不會超出它的包含塊

4、BFC的區域不會與float元素區域重疊

5、計算BFC的高度時,浮動子元素也參與計算

6、BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素,反之亦然

四、BFC的應用

說了這么多,那么我們BFC到底有什么用呢?下面我們通過幾個實例來解決一些問題:

實例1、解決margin重疊問題

玩css的朋友都知道margin collapse,也就是相鄰的垂直元素同時設置了margin后,實際margin值會塌陷到其中較大的那個值。

其根本原理就是它們處于同一個BFC,符合“屬于同一個BFC的兩個相鄰元素的margin會發生重疊”的規則。

margin重疊現象

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>margin重疊現象</title> <style type="text/css"> *{margin: 0;padding: 0;} .box p { margin: 20px 0px; background-color: skyblue; } </style></head><body> <div class="box" > <p>Lorem ipsum dolor sit.</p> <p>Lorem ipsum dolor sit.</p> <p>Lorem ipsum dolor sit.</p> </div></body></html>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来宾市| 三河市| 蓬溪县| 武陟县| 常州市| 荆门市| 宾川县| 富平县| 山西省| 太仆寺旗| 客服| 徐州市| 周宁县| 精河县| 应城市| 桓仁| 四子王旗| 花垣县| 宁化县| 温泉县| 深州市| 泉州市| 河北省| 金寨县| 浦县| 邯郸县| 长宁区| 桓台县| 兴城市| 兴山县| 南通市| 平利县| 马关县| 酒泉市| 许昌市| 许昌市| 讷河市| 浦北县| 宁阳县| 大庆市| 永胜县|