BFC

對css有了解的朋友肯定都知道盒式模型這個概念暖璧,對一個元素設(shè)置css掉缺,首先需要知道這個元素是block還是inline類型。而BFC就是用來格式化塊級盒子,同樣管理inline類型的盒子還有IFC咙轩,以及其他的FC。那首先我們就來看看FC的概念阴颖。
Formatting Context:指頁面中一個渲染區(qū)域活喊,并且擁有一套渲染規(guī)則,他決定了其子元素如何定位量愧,以及與其他元素的相互關(guān)系和作用钾菊。
BFC:塊級格式化上下文,它是指一個獨立的塊級渲染區(qū)域偎肃,只有Block-level Box參與煞烫,該區(qū)域擁有一套渲染規(guī)則來約束塊級盒子的布局,且與區(qū)域外部無關(guān)累颂。BFC的生成

既然上文提到BFC是一塊渲染區(qū)域滞详,那這塊渲染區(qū)域到底在哪,它又是有多大紊馏,這些由生成BFC的元素決定料饥,CSS2.1中規(guī)定滿足下列CSS聲明之一的元素便會生成BFC。float的值不為none朱监;
overflow的值不為visible岸啡;
display的值為inline-block、table-cell赌朋、table-caption凰狞;
position的值為absolute或fixed;看到有人把display:table也認(rèn)為可以生成BFC沛慢,其實這里的主要原因在于Table會默認(rèn)生成一個匿名的table-cell赡若,正是這個匿名的table-cell生成了BFC。

BFC的約束規(guī)則
瀏覽器對于BFC這塊區(qū)域的約束規(guī)則如下:
生成BFC元素的子元素會一個接一個的放置团甲。垂直方向上他們的起點是一個包含塊的頂部逾冬,倆個相鄰子元素之間垂直距離取決于元素margin特性。在BFC中相鄰的塊級元素外邊距會折疊躺苦。
生成BFC元素的子元素中身腻,每一個子元素的外邊距和包含塊的左邊界相接觸,(對于從右到左的格式化匹厘,右外邊距和右邊界相接觸)嘀趟,除非這個子元素也創(chuàng)建了一個新的BFC(如它自身也是一個浮動元素)。

有朋友對它做了分解愈诚,我們直接拿來:
內(nèi)部的BOX會在垂直方向上一個接一個的放置她按;
垂直方向上的距離有margin決定牛隅。(完整的說法是:屬于同一個BFC的倆個相鄰的BOX的margin會發(fā)生重疊,與方向無關(guān)酌泰。)
每個元素的左外邊距與包含塊的左邊界相接觸(從左到右)媒佣,即使浮動元素也是如此。(這說明BFC中的子元素不會超出它的包含塊陵刹,而position為absolute的元素可以超出它的包含塊邊界)默伍;
BFC的區(qū)域不會與float的元素區(qū)域重疊;
計算BFC的高度時衰琐,浮動子元素也參與計算也糊;
BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素碘耳,反之亦然显设;

看到以上的幾條約束框弛,讓我想起了學(xué)習(xí)CSS時的幾條規(guī)則:
Block元素會擴展到與父元素同寬辛辨,所以block元素會垂直排列;
垂直方向上的倆個相鄰DIV的margin會重疊瑟枫,而水平方向不會(此規(guī)則并不完全正確)斗搞;
浮動元素會盡量往左上方(或右下方);
為父元素設(shè)置overflow:hidden或浮動父元素慷妙,則會包含浮動元素僻焚;
……

BFC在布局中的應(yīng)用
上面說了那么多,那么BFC究竟有什么用膝擂,畢竟再好的東西也要為我所用才行虑啤。
防止margin重疊:
同一個BFC中倆個相鄰的box才會發(fā)生重疊與方向無關(guān),不過由于上文提到的第一條限制架馋,我們甚少看到水平方向的margin重疊狞山。這在IE這中是個特例,IE可以設(shè)置write-mode叉寂。
要阻止margin重疊萍启,只要將倆個元素別放在一個BFC中即可(可以用上文提到的方式讓相鄰元素其中一個生成BFC)。阻止倆個相鄰元素的重疊看起來沒有意義屏鳍,主要用于嵌套元素勘纯。

浮動相關(guān)問題;
使得父元素包含子元素钓瞭,常見的方式是為父元素設(shè)置overflow:hidden或者浮動父元素驳遵。根本原因在于創(chuàng)建BFC的元素,子浮動元素也會參與其高度計算山涡,即不會產(chǎn)生高度塌陷問題堤结。

多欄布局的一種方式
上文提到的一條規(guī)則:與浮動元素相鄰的已生成BFC的元素不能與浮動元素互相覆蓋搏讶。利用該特性可以作為多欄布局的一種實現(xiàn)方式。

這種布局的特點在于左右倆欄的寬度固定霍殴,中間欄可以根據(jù)瀏覽器寬度自適應(yīng)媒惕。
多欄布局

IE中也有與BFC類似概念的haslayout。

總結(jié)
在我第一次接觸BFC時經(jīng)常有一個疑問来庭,BFC的結(jié)構(gòu)是什么樣的妒蔚,像DOM一樣的樹狀結(jié)構(gòu),還是一個BFC集合月弛。其實我們不需要關(guān)心BFC的具體結(jié)構(gòu)肴盏,這要看瀏覽器的具體實現(xiàn)采用什么樣的數(shù)據(jù)結(jié)構(gòu)。對于BFC我們只需要知道使用一定的CSS聲明可以生成BFC帽衙,瀏覽器對生成的BFC有一系列的渲染規(guī)則菜皂,利用這些渲染規(guī)則我們可以達到一定的布局效果,為了達到特定的布局效果我們讓元素生成BFC厉萝。
對于CSS新手來說不建議涉獵BFC恍飘,還是應(yīng)該去看看相應(yīng)的CSS布局規(guī)則,像《CSS設(shè)計指南》谴垫、《CSS權(quán)威指南》這倆本都很不錯章母,達到一定積累再來看BFC,說不定會有一種豁然開朗的感覺翩剪。BFC中幾乎涉及到CSS布局的所有重要屬性乳怎,這也是BFC的難點和我們需要掌握BFC的意義所在。此處要說明的是前弯,這篇文章是我?guī)缀跻蛔植宦涞某聛淼尿阶海驗槲覍τ贐FC一竅不通,我認(rèn)為這樣抄錄一遍對于我理解BFC會有幫助的恕出,但是看到作者說不建議新手涉獵BFC询枚,我就釋然了。參考文獻——我的小樹林

** CSS

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剃根,一起剝皮案震驚了整個濱河市哩盲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狈醉,老刑警劉巖廉油,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苗傅,居然都是意外死亡抒线,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門渣慕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘶炭,“玉大人抱慌,你說我怎么就攤上這事≌A裕” “怎么了抑进?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長睡陪。 經(jīng)常有香客問我寺渗,道長,這世上最難降的妖魔是什么兰迫? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任信殊,我火速辦了婚禮,結(jié)果婚禮上汁果,老公的妹妹穿的比我還像新娘涡拘。我一直安慰自己,他們只是感情好据德,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布鳄乏。 她就那樣靜靜地躺著,像睡著了一般晋控。 火紅的嫁衣襯著肌膚如雪汞窗。 梳的紋絲不亂的頭發(fā)上姓赤,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天赡译,我揣著相機與錄音,去河邊找鬼不铆。 笑死蝌焚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的誓斥。 我是一名探鬼主播只洒,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劳坑!你這毒婦竟也來了毕谴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤距芬,失蹤者是張志新(化名)和其女友劉穎涝开,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體框仔,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡舀武,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了离斩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银舱。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡瘪匿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寻馏,到底是詐尸還是另有隱情棋弥,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布诚欠,位于F島的核電站嘁锯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聂薪。R本人自食惡果不足惜家乘,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藏澳。 院中可真熱鬧仁锯,春花似錦、人聲如沸翔悠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓄愁。三九已至双炕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撮抓,已是汗流浹背妇斤。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丹拯,地道東北人站超。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像乖酬,于是被迫代替她去往敵國和親死相。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案咬像? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,741評論 1 92
  • relative:生成相對定位的元素算撮,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 933評論 0 2
  • 一、BFC是什么县昂? 它是 Block Formatting Context (塊級格式化上下文) 的簡稱肮柜,接下來通...
    07120665a058閱讀 3,794評論 15 40
  • 文章版權(quán)歸饑人谷_Lyndon以及饑人谷所有素挽。 1. 浮動元素有什么特征?對父容器狸驳、其他浮動元素预明、普通元素缩赛、文字分...
    HungerLyndon閱讀 2,376評論 4 10
  • 對css有了解的朋友肯定都知道盒式模型這個概念,對一個元素設(shè)置css撰糠,首先需要知道這個元素是block還是inli...
    wmsj100閱讀 19,123評論 1 50