<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • 談談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.skdbbs.com

    存檔

    主站蜘蛛池模板: 日韩视频中文字幕精品偷拍| 无码人妻精品一区二区三区66 | 精品无码久久久久久久久久| 囯产精品一品二区三区| 毛片a精品**国产| www.精品| 国产精品666| 久久精品99久久香蕉国产色戒| 蜜臀精品无码AV在线播放| 国产成人精品cao在线| 免费精品99久久国产综合精品 | 午夜精品一区二区三区在线视 | 国产香蕉国产精品偷在线观看| 精品国产麻豆免费人成网站| 免费精品无码AV片在线观看| 亚洲精品人成无码中文毛片| 麻豆国内精品久久久久久| 国产精品日日摸夜夜添夜夜添1国产精品va欧美精 | 久久久91人妻无码精品蜜桃HD| 亚洲国产精品人久久| 国产精品欧美久久久天天影视| 国产精品亚洲日韩欧美色窝窝色欲 | 国产一区二区精品| 国产精品后入内射日本在线观看| 日韩精品中文字幕无码一区| 亚洲精品一级无码中文字幕| 久久精品亚洲乱码伦伦中文| 国产精品天干天干在线综合| 国产精品偷伦视频免费观看了| 99久久免费国产精品| 国产99精品一区二区三区免费| 91精品国产91久久久久久青草| 日本精品一区二区三区在线观看| 国产精品污视频| 久久国产精品99久久久久久老狼 | 99免费精品国产| 99久久亚洲综合精品网站| 国产精品无码素人福利| 精品久久久久久无码中文野结衣 | 亚洲精品无码Av人在线观看国产| 亚洲欧洲国产精品香蕉网|