CSS之BFC應用

1.解決margin疊加問題

三P每個p之間的距離為50px码泛,發(fā)生了外邊距疊加。 要解決這個疊加問題即讓每個P之間是100px,我們可以新建一個BFC择膝,怎么建呢?可以給p元素添加一個父元素检激,讓它觸發(fā)BFC肴捉。如下:

snip_20160525214614.png

Paste_Image.png

2.用于布局

snip_20160525214929.png

從圖中我們會發(fā)現(xiàn)上面BFC的第三個特性,就是元素的左外邊距會觸碰到包含塊容器的做外邊框叔收,就算存在浮動也會如此齿穗。那么我們?nèi)绾谓鉀Q這個問題呢?看上面BFC第四個特性饺律,就是BFC不會與浮動盒子疊加窃页,那么我們是不是可以創(chuàng)建一個新的BFC來解決這個問題呢?來看看:

snip_20160525215112.png

發(fā)現(xiàn)我們用overflow:hidden觸發(fā)main元素的BFC之后蓝晒,效果立馬出現(xiàn)了,一個兩欄布局就這么妥妥的搞掂…
3.用于清除浮動腮出,計算BFC高度.
因為上面第六個特性提到計算BFC高度時,浮動元素也會參與計算芝薇,我們先看一個例子:

snip_20160525222645.png

我們發(fā)現(xiàn)由于里面兩個子元素浮動的關(guān)系胚嘲,兩個box已經(jīng)脫離了父元素的包含塊,父元素高度已經(jīng)塌陷洛二,我們需要讓父元素包含兩個box子元素馋劈,這樣計算高度時草娜,兩個浮動子元素就會參與,所以我們要閉合浮動拐揭,觸發(fā)父元素的BFC玄窝,我們還是繼續(xù)用overflow:hidden來看看效果吧:

snip_20160525222815.png

怎么樣,效果還很明顯的嗎械姻,當然清理(閉合)浮動還有很多方法妒蛇,大家可以看看一絲大神寫的那些年我們一起清除過的浮動。 好了寫到這里基本才不多了楷拳,BFC是個很奇怪的東西绣夺,她一直隱式的存在我們的css樣式里,但是我們要記住BFC是頁面元素里一個獨立存在作用塊欢揖,它不影響它外面的布局陶耍,外面的元素也不會影響到BFC里面的布局。

What:了解該知識點的概念她混,本質(zhì)以及有關(guān)牽扯到的相關(guān)知識概念
BFC這個東西說常見的話你可能不覺得烈钞,但是你肯定會常用,也許你在用的時候也沒想到BFC這東西坤按。網(wǎng)上也有很多寫這些東西的文章毯欣,但是自己寫一遍印象更深一點。
首先我們看看w3c對BFC是怎么定義的:
http://www.w3.org/TR/CSS2/visuren.html#block-formatting
Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with ‘overflow’ other than ‘visible’ (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.
In a block formatting context, boxes are laid out one after the other, vertically, beginning at the top of a containing block. The vertical distance between two sibling boxes is determined by the ‘margin’ properties. Vertical margins between adjacent block-level boxes in a block formatting context collapse.
In a block formatting context, each box’s left outer edge touches the left edge of the containing block (for right-to-left formatting, right edges touch). This is true even in the presence of floats (although a box’s line boxes may shrink due to the floats), unless the box establishes a new block formatting context (in which case the box itself may become narrower due to the floats).

用谷歌翻譯(笑..我是谷歌腦殘粉)過來就是:
浮動元素和絕對定位元素晋涣,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions)仪媒,以及overflow值不為“visiable”的塊級盒子,都會為他們的內(nèi)容創(chuàng)建新的塊級格式化上下文谢鹊。
在一個塊級格式化上下文里算吩,盒子從包含塊的頂端開始垂直地一個接一個地排列,兩個盒子之間的垂直的間隙是由他們的margin 值所決定的佃扼。兩個相鄰的塊級盒子的垂直外邊距會發(fā)生疊加偎巢。
在塊級格式化上下文中,每一個盒子的左外邊緣(margin-left)會觸碰到容器的左邊緣(border-left)(對于從右到左的格式來說兼耀,則觸碰到右邊緣)压昼,即使存在浮動也是如此,除非這個盒子創(chuàng)建一個新的塊級格式化上下文瘤运。

從上面我們還可找出幾個幾個比較重要的概念東西窍霞,比如:boxe , block formatting context。毫無疑問BFC就是block formatting context的縮寫拯坟,中文就是“塊級格式化上下文”的意思但金。我們在那個w3c那個頁面發(fā)現(xiàn)還有其他inline formatting context,所以我們可以看看 formatting context是個什么東西:
Formatting context是W3C CSS2.1規(guī)范中的一個概念郁季。它是頁面中的一塊渲染區(qū)域冷溃,并且有一套渲染規(guī)則钱磅,它決定了其子元素將如何定位,以及和其他元素的關(guān)系和相互作用似枕。
最常見的Formatting context有Block fomatting context(簡稱BFC)和Inline formatting context(簡稱IFC)盖淡。CSS2.1 中只有BFC和IFC, CSS3中還增加了GFC和FFC.
至于那個box還要講嗎?嗯凿歼,還是回顧一下:
Box是CSS布局的對象和基本單位褪迟, 直觀點來說,就是一個頁面是由很多個Box(即boxes)組成的答憔。元素的類型和display屬性牵咙,決定了這個Box的類型。 不同類型的Box攀唯, 會參與不同的Formatting context(一個決定如何渲染文檔的容器),因此Box內(nèi)的元素會以不同的方式渲染渴丸。常見的盒子類型
block-level box: display屬性為block, list-item, table的元素侯嘀,會生成block-level box。并且參與block fomatting context谱轨。 inline-level box: display屬性為inline, inline-block, inline-table的元素戒幔,會生成inline-level box。并且參與inline formatting context土童。 媽蛋四級剛剛飄過的孩子看這點英文不容易啊诗茎,有時候我們總覺的書上或者官方的概念定義的東西不利于我們理解,所以我們更喜歡有些老師通俗的講解献汗。這里我們也通俗的理解一下:
BFC就是“塊級格式化上下文”的意思敢订,創(chuàng)建了 BFC的元素就是一個獨立的盒子,不過只有Block-level box可以參與創(chuàng)建BFC罢吃, 它規(guī)定了內(nèi)部的Block-level Box如何布局楚午,并且與這個獨立盒子里的布局不受外部影響,當然它也不會影響到外面的元素尿招。
BFC有一下特性:
內(nèi)部的Box會在垂直方向矾柜,從頂部開始一個接一個地放置。
Box垂直方向的距離由margin決定就谜。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生疊加
每個元素的margin box的左邊怪蔑, 與包含塊border box的左邊相接觸(對于從左往右的格式化,否則相反)丧荐。即使存在浮動也是如此缆瓣。
BFC的區(qū)域不會與float box疊加。
BFC就是頁面上的一個隔離的獨立容器篮奄,容器里面的子元素不會影響到外面的元素捆愁,反之亦然割去。
計算BFC的高度時,浮動元素也參與計算昼丑。

好了What這一階段就到這了呻逆,基本的概念我們都要了解清楚,不清楚的多看幾遍菩帝,是在不清楚的我猜是我寫的不夠通俗易解咖城。
接下來我一般會考慮Why,即為什么會出現(xiàn)這個問題呼奢,為什么要這樣用宜雀,為什么會出現(xiàn)這些效果。但是這里就不寫了握础,因為我也不知道寫啥(哭…求高手指點)…
到最后我就是考慮How了辐董,不用說你也知道了,就是怎么解決這些問題禀综,這些知識點該怎么用简烘,還有沒有其他的方法..
那么我們該怎么使用BFC呢,如何觸發(fā)BFC呢定枷?:
float 除了none以外的值
overflow 除了visible 以外的值(hidden孤澎,auto,scroll )
display (table-cell欠窒,table-caption覆旭,inline-block, flex, inline-flex)
position值為(absolute,fixed)
fieldset元素

在以上的情況里可以創(chuàng)建BFC岖妄。
接下我們看下怎么運用BFC型将,在哪些場景可以用到BFC.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荐虐,隨后出現(xiàn)的幾起案子茶敏,更是在濱河造成了極大的恐慌,老刑警劉巖缚俏,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊搏,死亡現(xiàn)場離奇詭異,居然都是意外死亡忧换,警方通過查閱死者的電腦和手機恬惯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亚茬,“玉大人酪耳,你說我怎么就攤上這事。” “怎么了碗暗?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵颈将,是天一觀的道長。 經(jīng)常有香客問我言疗,道長晴圾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任噪奄,我火速辦了婚禮死姚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勤篮。我一直安慰自己都毒,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布碰缔。 她就那樣靜靜地躺著账劲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪金抡。 梳的紋絲不亂的頭發(fā)上涤垫,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音竟终,去河邊找鬼。 笑死切蟋,一個胖子當著我的面吹牛统捶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柄粹,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼喘鸟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驻右?” 一聲冷哼從身側(cè)響起什黑,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堪夭,沒想到半個月后愕把,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡森爽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年恨豁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爬迟。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡橘蜜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出付呕,到底是詐尸還是另有隱情计福,我是刑警寧澤跌捆,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站象颖,受9級特大地震影響佩厚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜力麸,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一可款、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧克蚂,春花似錦闺鲸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赤屋,卻和暖如春立镶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背类早。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工媚媒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涩僻。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓缭召,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逆日。 傳聞我的和親對象是個殘疾皇子嵌巷,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,737評論 1 92
  • 先前在學習CSS float時室抽,有同學提到了BFC這個詞搪哪,作為求知好問的好學生,哪里不懂查哪里坪圾,那么今天就來研究一...
    這名字真不對閱讀 6,548評論 3 19
  • 什么是BFC BFC全稱是Block Formatting Context晓折,即塊格式化上下文。它是CSS2.1規(guī)范...
    陌客百里閱讀 532評論 3 4
  • 以下文章是我在網(wǎng)上收集的內(nèi)容兽泄,為了記錄自己的學習以及為了以后不到處找而記錄下來已维,如果對你有用,請感謝寫這些文章的前...
    DCbryant閱讀 927評論 0 2
  • 轉(zhuǎn)載自(http://web.jobbole.com/83274/) BFC BFC全稱是Block Format...
    居客俠閱讀 2,138評論 0 20