深入學(xué)習(xí)BFC

前言

關(guān)于BFC女蜈,很多人可能很熟悉验烧,但有些人可能第一次聽說板驳。對(duì)于熟悉的人無妨也可以溫習(xí)一下查缺補(bǔ)漏。對(duì)于還不是很了解的人認(rèn)真閱讀完后碍拆,應(yīng)該都能夠比較深入的理解BFC這個(gè)概念若治、作用以及用法。希望對(duì)大家有所收獲感混。

BFC是什么端幼?

BFC全稱為 block formatting context,中文為“塊級(jí)格式化上下文”弧满。它是一個(gè)獨(dú)立的渲染區(qū)域,規(guī)定了內(nèi)部如何進(jìn)行布局婆跑,并且內(nèi)外部的元素之間互不影響。相對(duì)應(yīng)的還有 IFC庭呜, 也就是inline formatting context滑进,中文為“內(nèi)聯(lián)格式化上下”。它不是本文的重點(diǎn)募谎,感興趣的童鞋可以自行查閱了解扶关。

如何形成BFC?

  • <html>根元素
  • float的值不為none
  • overflow的值為auto近哟、scrollhidden
  • display的值為table-cell驮审、table-captioninline-block中的任何一個(gè)
  • position的值不為relativestatic

其中,最常見的就是overflow:hiddenfloat:left/right疯淫、position:absolute地来。也就是說,每次看到這些屬性的時(shí)候熙掺,就代表了該元素以及創(chuàng)建了一個(gè)BFC了未斑。

BFC作用有哪些?

  • 利用BFC可以阻止垂直外邊距重疊
  • 利用BFC可以清除浮動(dòng)
  • 利用BFC進(jìn)行自適應(yīng)布局
  • 利用BFC可以阻止被浮動(dòng)元素覆蓋

BFC有什么特性币绩?

特性1: BFC中元素會(huì)在垂直方向蜡秽,從頂部開始一個(gè)接一個(gè)地放置。

image

我們平常說的盒子是由 margin缆镣、border芽突、paddingcontent 組成的董瞻,實(shí)際上每種類型的四條邊定義了一個(gè)盒子寞蚌,如圖分別是content boxpadding box钠糊、border box挟秤、margin box,這四種類型的盒子一直存在抄伍,即使他們的值為0艘刚。而決定塊盒在包含塊中與相鄰塊盒的垂直間距的便是margin-box。從頂部一個(gè)接一個(gè)放置可以理解為平時(shí)div一行一行塊級(jí)放置的樣式截珍。

特性2: BFC中兩相鄰元素會(huì)發(fā)生折疊

元素垂直方向的距離由margin決定攀甚。屬于同一個(gè)BFC的兩個(gè)相鄰元素的margin會(huì)發(fā)生疊加

實(shí)例代碼如下:

<p>ABC</p>
<p>abc</p>

p {
    color: #fff;
    background: #f66;
    width: 200px;
    line-height: 100px;
    text-align:center;
    margin: 100px;
}

效果圖:

image

上面例子中兩個(gè)P之間的距離本該為100px,然后實(shí)際卻為50px岗喉,主要原因是發(fā)生了margin折疊了云稚。如果遇到這種情況,只需要將兩個(gè)P給其中一個(gè)P外面包一個(gè)div沈堡,然后通過觸發(fā)外面這個(gè)divBFC静陈,就可以阻止這兩個(gè)Pmargin重疊。即利用BFC可以阻止垂直外邊距重疊诞丽。

特性3: BFC中父子之間是margin boxborder box左邊相接觸鲸拥。

每個(gè)元素的margin box的左邊,與包含塊border box的左邊相接觸(對(duì)于從左往右的格式化僧免,否則相反)刑赶。即使存在浮動(dòng)也是如此。

實(shí)例代碼如下:

<div class="wrap">
    <div class="child">ABC</div>
</div>

.child {
    color: #fff;
    background: #f66;
    width: 200px;
    line-height: 50px;
    text-align:center;
}
.wrap {
    float: left;
    border: 10px solid #fcc;
    margin: 50px;
}

效果圖:

image

給子div加浮動(dòng)懂衩,浮動(dòng)的結(jié)果撞叨,如果沒有清除浮動(dòng)的話金踪,父div不會(huì)將子div 包裹,但還是在父div的范圍之內(nèi)牵敷,子div的兩邊邊接觸父divborder box 的兩邊胡岔,除非設(shè)置margin來撐開距離,否則一直是這個(gè)規(guī)則枷餐。

特性4: BFC的區(qū)域不會(huì)與float box疊加靶瘸。

實(shí)例代碼如下:

<div class="aside"></div>
<div class="wrap">
    <div class="child"></div>
</div>
.aside {
  width: 100px;
  height: 150px;
  float: left;
  background: #f66;
}
.child {
  height: 200px;
  overflow: hidden; //觸發(fā)main盒子的BFC
  background: #fcc;
}
.wrap {
  width: 500px;
}

效果圖:

image

上面aside盒子有一個(gè)浮動(dòng)屬性,覆蓋了child盒子的內(nèi)容毛肋,child盒子沒有清除 aside盒子的浮動(dòng)怨咪。只做了一個(gè)動(dòng)作,就是觸發(fā)自身的BFC润匙,然后就不再被aside 盒子覆蓋了诗眨。所以,BFC的區(qū)域不會(huì)與float box重疊孕讳。即利用BFC可以阻止被浮動(dòng)元素覆蓋

特性5: BFC內(nèi)外元素互不影響

BFC就是頁面上的一個(gè)隔離的獨(dú)立容器辽话,容器里面的子元素不會(huì)影響到外面的元素,反之亦然卫病。

實(shí)例代碼如下:

<div class="main">
<div class="child">ABC</div>
</div>
<div class="wrap">
    <p>content</p> <p>content</p> <p>content</p> <p>content</p> <p>content</p>
</div>

.wrap {
    height: 200px; 
    background: #AAA;
}
.main {
    float: left; 
    width: 100px; 
    height: 100px; 
    background: #f66;
}
.child {
    color: #fff;
    padding-left: 200px;
    line-height: 50px;
}

效果圖:

image

上面例子中,main盒子形成了BFC,BFC是一個(gè)獨(dú)立的渲染區(qū)域里面ABC元素不管如何的位移變化都不會(huì)影響到外元素典徘。

特性6: 計(jì)算BFC的高度時(shí)蟀苛,浮動(dòng)元素也參與計(jì)算。

實(shí)例代碼如下:

<div class="wrap">
    <div class="child">ABC</div>
    <div class="child">abc</div>
</div>

.wrap {
    overflow: hidden;
    width: 250px;
    border: 5px solid #f66;
}
.child {
    float: left;  
    width: 100px;  
    border: 5px solid #fcc;
    line-height: 100px;
}

效果圖:

image

上面例子可以看出逮诲,為達(dá)到清除內(nèi)部浮動(dòng)帜平,我們可以觸發(fā)wrap生成BFC,即利用BFC來清除浮動(dòng)梅鹦。那么wrap在計(jì)算高度時(shí)裆甩,wrap內(nèi)部的浮動(dòng)元素child也會(huì)參與計(jì)算。

最后

如果本文對(duì)你有所幫助齐唆,歡迎點(diǎn)贊關(guān)注`退ā!箍邮!大家加油茉帅。。

更多優(yōu)質(zhì)文章可以訪問GitHub博客锭弊,歡迎帥哥美女前來Star?芭臁!味滞!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末樱蛤,一起剝皮案震驚了整個(gè)濱河市钮呀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昨凡,老刑警劉巖爽醋,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異土匀,居然都是意外死亡子房,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門就轧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來证杭,“玉大人,你說我怎么就攤上這事妒御〗夥撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵乎莉,是天一觀的道長(zhǎng)送讲。 經(jīng)常有香客問我,道長(zhǎng)惋啃,這世上最難降的妖魔是什么哼鬓? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮边灭,結(jié)果婚禮上异希,老公的妹妹穿的比我還像新娘。我一直安慰自己绒瘦,他們只是感情好称簿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惰帽,像睡著了一般憨降。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上该酗,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天授药,我揣著相機(jī)與錄音,去河邊找鬼呜魄。 笑死烁焙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耕赘。 我是一名探鬼主播骄蝇,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼操骡!你這毒婦竟也來了九火?” 一聲冷哼從身側(cè)響起赚窃,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岔激,沒想到半個(gè)月后勒极,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虑鼎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年辱匿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片炫彩。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匾七,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出江兢,到底是詐尸還是另有隱情昨忆,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布杉允,位于F島的核電站邑贴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叔磷。R本人自食惡果不足惜拢驾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望改基。 院中可真熱鬧繁疤,春花似錦、人聲如沸寥裂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽封恰。三九已至,卻和暖如春褐啡,著一層夾襖步出監(jiān)牢的瞬間诺舔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工备畦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留低飒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓懂盐,卻偏偏與公主長(zhǎng)得像褥赊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莉恼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一拌喉,浮動(dòng)元素有什么特征速那?對(duì)父容器、其他浮動(dòng)元素尿背、普通元素端仰、文字分別有什么影響? 浮動(dòng)模型是一種可視化格式模型,浮動(dòng)...
    DeeJay_Y閱讀 874評(píng)論 0 4
  • relative:生成相對(duì)定位的元素田藐,通過top,bottom,left,right的位置相對(duì)于其正常位置進(jìn)行定位...
    zx9426閱讀 943評(píng)論 0 2
  • BFC全稱是Block Formatting Context荔烧,即塊格式化上下文。它是CSS2.1規(guī)范定義的汽久,關(guān)于C...
    xf0128閱讀 337評(píng)論 0 0
  • 什么是BFC BFC全稱是Block Formatting Context鹤竭,即塊格式化上下文。它是CSS2.1規(guī)范...
    陌客百里閱讀 533評(píng)論 3 4
  • 此時(shí)小程序項(xiàng)目目錄下面已經(jīng)有了node_modules 目錄回窘;但是點(diǎn)擊小程序構(gòu)建npm 還是報(bào) 沒有找到node_...
    SevenLonely閱讀 3,881評(píng)論 0 0