CSS中關於觸發BFC

來源:互聯網
上載者:User
一、BFC 定義

  BFC(Block formatting context)直譯為"塊級格式化上下文"。它是一個獨立的渲染地區,只有Block-level box參與, 它規定了內部的Block-level Box如何布局,並且與這個地區外部毫不相干。


二、BFC布局規則:
1、BFC布局規則:
(1) 內部的Box會在垂直方向,一個接一個地放置。
(2) Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊
(3) 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此。
(4) BFC的地區不會與float box重疊。
(5) BFC就是頁面上的一個隔離的獨立容器,容器裡面的子項目不會影響到外面的元素。反之也如此。
(6) 計算BFC的高度時,浮動元素也參與計算


三、哪些元素會產生BFC?
根項目
float屬性不為none
position為absolute或fixed
display為inline-block, table-cell, table-caption, flex, inline-flex
overflow不為visible


--------------------------------------------------------------------------------------------------------------
做一個側邊欄目但是被包含了

<span style="font-size:18px;"><div class="aside"></div><div class="main"></div>.aside {            width: 100px;            height: 150px;            float: left;            background: #f66;        }        .main {            height: 200px;            background: #fcc;        }</span>
---------------------------------------------------------------------------------------------------------------
是不是出問題了呢。
--出發BFC
 .main {            height: 200px;            background: #fcc;            overflow: hidden;        }
--------------------------------------------------------------------------------------------------------------
經典的上邊距重疊問題
實驗2:
.main{            background-color: darkgrey;            width: 700px;        }.first{            margin-top: 100px;            width: 50px;            height: 50px;            background-color: #000000;        }        .second{            width: 50px;            height: 50px;            background-color: blue;        }<div class="main">    <div class="first"></div>    <div class="second"></div></div>
margin-top: 100px;---這句話如果加上和沒加有什麼區別呢  ------------BFC的地區不會與float box重疊 用main觸發BFC


實驗3:影響別的元素
 .main{            background-color: darkgrey;            width: 700px;        }        .first{            width: 50px;            height: 50px;            background-color: #000000;        }        .second{            width: 50px;            height: 50px;            background-color: blue;            margin-left: 800px;        }
當我們給main裡邊的元素設定了過多的值800px的時候,勢必會印象外邊的東西
當我們設定了BFC的時候,就不會發生這種情況-------------------BFC就是頁面上的一個隔離的獨立容器,容器裡面的子項目不會影響到外面的元素


實驗:
.box {width:210px;border: 1px solid #000;float: left;}        .img {width: 100px;height: 100px;background: #696;float: left;}        .info {background: #ccc;color: #fff;}<div class="box">    <div class="img">image</div>    <p class="info">hello world</p></div>
當文字變多的時候會發生什麼事情呢。
我們發現,文字環繞了---這很憂傷
這時候我們可以單獨為P出發我們的BFC
  .info {background: #ccc;color: #fff;overflow: hidden}

實驗
<span style="font-size:18px;"><div class="par"><div class="child"></div><div class="child"></div></div>  .par {            border: 5px solid #fcc;            width: 300px;        }   .child {            border: 5px solid #f66;            width:100px;            height: 100px;            float: left;       }</span>
發生了什麼。float之後的元素沒有撐開我們的盒子,而我們的原則,計算BFC的高度時,浮動元素也參與計算
.par {            border: 5px solid #fcc;            width: 300px;            overflow: hidden;        }

觸發BFC
案例:
<span style="font-size:18px;">  p {            color: #f55;            background: #fcc;            width: 200px;            line-height: 100px;            text-align:center;            margin: 100px;        }       <p>Haha</p><p>Hehe</p></span>

出問題了,BFC裡邊元素margin重疊了
<span style="font-size:18px;"><p>Haha</p><div class="wrap"><p>Hehe</p></div> .wrap {            overflow: hidden;        }</span>

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.