理解BFC以及BFC相關(guān)布局問題解決

寫頁面時會遇到:

  1. 子元素float父元素的高度不會撐開;
  2. 在布局時,box1and box2,其中box1 float:left界牡,這是box2會在box1下面,(如果文字過多就會形成文字環(huán)繞效果),但我就是想要box2在box1的右側(cè);
  3. 又或是上下兩個box的margin重疊股囊。
    這些問題除了其他一些方法解決外,都可以利用加上overflow:hidden更啄,但是why?其實 BFC的作用呢稚疹。
    BFC??啥?
    BFC這個詞....

BFC:全稱box formatting context;即塊格式上下文祭务,block-level元素參與内狗;

那么什么是block-level呢?
等等 等等...
'W3C' CSS2.1規(guī)范:
Block-level elements are those elements of the source document that are formatted visually as blocks (e.g., paragraphs). The following values of the 'display'property make an element block-level: 'block', 'list-item', and 'table'.
塊級元素是源文檔中被視為塊(例如段落)可視化格式的那些元素义锥。 'display'屬性的以下值構(gòu)成一個塊級別:'block'柳沙,'list-item'和'table'。

那它是怎么形成的呢拌倍?

以下情況之一:

  • float值不為none
  • position:fixed / absolute
  • display:table-cell / table-caption /inline-block / flex / inline-flex.
  • overflow屬性不為visible

我們知道了什么是BFC,如何形成BFC赂鲤,接下來就要說BFC的布局規(guī)則
滴滴滴...

  1. 內(nèi)部的box會一個接一個地垂直布局。
  2. 兩個相鄰box的垂直距離由margin決定柱恤。屬于同一個BFC的兩個相鄰Box的margin會發(fā)生重疊
  3. 每個盒子的左外邊框緊挨著左邊框的包含塊(從左往右的格式化時数初,否則相反)。即使存在浮動也是如此
  4. BFC的區(qū)域不會與float box重疊梗顺。
  5. BFC就是頁面上的一個隔離的獨立容器泡孩,容器里面的子元素不會影響到外面的元素。反之也如此寺谤。
  6. 計算BFC的高度時仑鸥,浮動元素也參與計算.

該知道的理論也差不多了吮播,該解答了~
問題1:子元素float父元素的高度不會撐開

 <section class="container">
        <style>
            .container{
                color:#FFF;
                width: 300px;
                margin:100px auto;
                border:1px solid #330033;
            }
            .left{
                float: left;
                width: 100px;
                height: 80px;
                background: #FF0066;
            }
            .right{
                background: #FFCCFF;
            }    
        </style>
        <div class="left">我是left</div>
        <div class="right">我是right</div>
    </section>

效果:


image.png

我們看到container只是right的高,而left中float使該元素脫離了文檔流它的高沒有計算在內(nèi)锈候,現(xiàn)在要想left的高度計算在內(nèi)薄料,根據(jù)BFC布局規(guī)則6就可以,形成一個BFC區(qū)不就可以計算float的高度嘍泵琳,來摄职,上碼:

.container{
                color:#FFF;
                width: 300px;
                margin:100px auto;
                border:1px solid #330033;
                overflow: hidden;
            }
image.png

果真嘿,其實获列,這里不止加overflow:hidden,加上邊介紹任何一種可以形成BFC區(qū)奏行谷市,比如:overflow: auto; / float: left; /display: flex;等等,根據(jù)項目中的實際需求击孩。

2.問題2:box2在box1右側(cè)
在問題1里的代碼基礎上迫悠,把right區(qū)增加一個高度比如300px,就可以看到效果liu

image.png

           .right{
                background: #FFCCFF;
                height: 300px;
                overflow: hidden;
            }

由于left塊float的原因巩梢,導致right在left下面创泄,解決此問題
根據(jù)BFC布局規(guī)則4 :BFC的區(qū)域不會與float box重疊,那么right形成BFC區(qū)
效果:

image.png

哇括蝠,好了呀鞠抑!

問題3:magin重疊問題

   <section class="container">
        <style>
            .container{
                color:#FFF;
                width: 300px;
                margin:100px auto;
                border:1px solid #330033;
                overflow: auto;
            }
            .box1,.box2{
                height: 50px;
            }
            .box1{
                background: #FF0066;
                margin-bottom:20px;
            }
            .box2{
                background: #FFCCFF;
                margin-top:50px;
            }            
        </style>
        <div class="box1">我是box1</div>
        <div class="box2">我是box2</div>
    </section>

image.png

我們大多以為是80px,可結(jié)果卻是50px!
why?
BFC原則2指明了同一個BFC區(qū)的margin垂直重疊忌警,不在同一個是不是就不重疊了搁拙,來來來

        ...
        .wrapper{
               overflow:hidden;
          }  
        ...
        <div class="wrapper">
             <div class="box1">我是box1</div>
        </div>       
        <!-- <div class="wrapper"> -->
        <div class="box2">我是box2</div>
        <!-- </div> -->

ok!通過給box1或box2添加一個父元素形成和另一個不在同一區(qū)。

關(guān)于垂直margin折疊

  • 兩個相鄰的外邊距都是正數(shù)時法绵,折疊結(jié)果是它們兩者之間較大的值;
  • 兩個相鄰的外邊距都是負數(shù)時箕速,折疊結(jié)果是兩者絕對值的較大值;
  • 兩個外邊距一正一負時,折疊結(jié)果是兩者的相加的和;

最后的最后朋譬,歡迎指正~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盐茎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子徙赢,更是在濱河造成了極大的恐慌庭呜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犀忱,死亡現(xiàn)場離奇詭異,居然都是意外死亡扶关,警方通過查閱死者的電腦和手機阴汇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來节槐,“玉大人搀庶,你說我怎么就攤上這事拐纱。” “怎么了哥倔?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵秸架,是天一觀的道長。 經(jīng)常有香客問我咆蒿,道長东抹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任沃测,我火速辦了婚禮缭黔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒂破。我一直安慰自己馏谨,他們只是感情好,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布附迷。 她就那樣靜靜地躺著惧互,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喇伯。 梳的紋絲不亂的頭發(fā)上喊儡,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音艘刚,去河邊找鬼管宵。 笑死,一個胖子當著我的面吹牛攀甚,可吹牛的內(nèi)容都是我干的箩朴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秋度,長吁一口氣:“原來是場噩夢啊……” “哼炸庞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荚斯,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埠居,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后事期,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滥壕,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年兽泣,在試婚紗的時候發(fā)現(xiàn)自己被綠了绎橘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡唠倦,死狀恐怖称鳞,靈堂內(nèi)的尸體忽然破棺而出涮较,到底是詐尸還是另有隱情,我是刑警寧澤冈止,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布狂票,位于F島的核電站,受9級特大地震影響熙暴,放射性物質(zhì)發(fā)生泄漏闺属。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一怨咪、第九天 我趴在偏房一處隱蔽的房頂上張望屋剑。 院中可真熱鬧,春花似錦诗眨、人聲如沸唉匾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巍膘。三九已至,卻和暖如春芋簿,著一層夾襖步出監(jiān)牢的瞬間峡懈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工与斤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肪康,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓撩穿,卻偏偏與公主長得像磷支,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子食寡,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案雾狈? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,753評論 1 92
  • relative:生成相對定位的元素,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 943評論 0 2
  • 1.在什么場景下會出現(xiàn)外邊距合并移盆?如何合并?如何不讓相鄰元素外邊距合并伤为?給個父子外邊距合并的范例 概念:在CSS當...
    饑人谷_任磊閱讀 650評論 0 3
  • 一、在什么場景下會出現(xiàn)外邊距合并爽醋?如何合并蚁署?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 在CSS當中蚂四,相...
    dengpan閱讀 575評論 0 0
  • 文章版權(quán)歸饑人谷_Lyndon以及饑人谷所有遂赠。 1. 浮動元素有什么特征久妆?對父容器、其他浮動元素跷睦、普通元素筷弦、文字分...
    HungerLyndon閱讀 2,381評論 4 10