<address id="ttjl9"></address>

      <noframes id="ttjl9"><address id="ttjl9"><nobr id="ttjl9"></nobr></address>
      <form id="ttjl9"></form>
        <em id="ttjl9"><span id="ttjl9"></span></em>
        <address id="ttjl9"></address>

          <noframes id="ttjl9"><form id="ttjl9"></form>

          談談BFC

          2018-5-14    周周

          一、什么是BFC
                 BFC(block formatting context)簡單來說,BFC 就是一種屬性,這種屬性會影響著元素的定位以及與其兄弟元素之間的相互作用。
              中文常譯為塊級格式化上下文。是 W3C CSS 2.1 規范中的一個概念, 從樣式上看,具有 BFC 的元素與普通的容器沒有什么區別,但是從功能上,具有 BFC 的元素可以看作是隔離了的獨立容器,容器里面的元素不會在布局上影響到外面的元素,并且 BFC 具有普通容器沒有的一些特性,它決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。

          、如何觸發 BFC

                上面介紹了 BFC 的定義,那么如何觸發 BFC 呢?
              滿足下面任一條件的元素,會觸發為 BFC :
              1、浮動元素,float 除 none 以外的值
              2、絕對定位元素,position(absolute,fixed)
              3、display 為以下其中之一的值 inline-blocks,table-cells,table-captions
              4、overflow 除了 visible 以外的值(hidden,auto,scroll)

          BFC布局與普通文檔流布局區別      
              普通文檔流布局規則
              1.浮動的元素是不會被父級計算高度
              2.非浮動元素會覆蓋浮動元素的位置
              3.margin會傳遞給父級
              4.兩個相鄰元素上下margin會重疊

              BFC布局規則
              1.浮動的元素會被父級計算高度(父級觸發了BFC)
              2.非浮動元素不會覆蓋浮動元素位置(非浮動元素觸發了BFC)
              3.margin不會傳遞給父級(父級觸發了BFC)

              4.兩個相鄰元素上下margin會重疊(給其中一個元素增加一個父級,然后讓他的父級觸發BFC)

             下面來說一下BFC的實際使用場景
             場景1:解決子盒子都浮動時 父盒子高度不參與計算問題
              <style>
                .far {
                   border: 10px solid pink;
                   width: 300px;
               }
                .child {
                   border: 10px solid yellowgreen;
                   width:100px;
                   height: 100px;
                   float: left;
              }
               .far{
                   overflow: hidden;
              }
              </style>
              <body>
                  <div class="far">
                       <div class="child"></div>
                       <div class="child"></div>
                  </div>
              </body>

              根據overflow 除了 visible 以外的值(hidden,auto,scroll)就會觸發BFC的原則 計算BFC高度時 ,floatbox也參與其中。


              場景2:box垂直方向的距離 會由margin來決定 相鄰兩個盒子之間margin會重疊 ,這就是margin上下間值合并的原因

              <style>
              p {
                  color: pink;
                  background: #fcc;
                  width: 200px;
                  height:100px;
                  text-align:center;
                  margin: 100px;
              }
              </style>
              <body>
                 <p></p>
                 <p></p>
              </body>

              要解決這個問題我們可以在p外面包裹一層容器,并觸發該容器生成一個BFC。那么兩個P便不屬于同一個BFC,就不會發生margin重疊了,解決代碼如下。
              <style>
                 .box {
                    overflow: hidden;
                 }
                 p {
                    background: green;
                    width: 200px;
                    height: 200px;
                    margin: 100px;
                }
              </style>
              <body>
                 <p></p>
                 <div class="box">
                     <p></p>
                 </div>

              </body>

              場景3:實現左側固定右側自適應等類似布局
              <style>
                  .out{
                      border: 1px solid red;
                      height: 200px;
                  }
                  .left{
                      width: 200px;
                      height: 150px;
                      background-color: green;
                      float: left;
                  }
                  .right{
                      background-color: pink;
                      height: 250px;
                      overflow: hidden;
                  }
                </style>
                <body>
               <div class="out">
                  <div class="left"></div>
                  <div class="right"></div>
                </div>

          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://www.syprn.cn

          存檔

          亚洲va欧美va天堂v国产综合