首頁  >  文章  >  web前端  >  浮動的定義與浮動的清除(BFC)

浮動的定義與浮動的清除(BFC)

零下一度
零下一度原創
2017-05-10 11:57:301632瀏覽

浮動

1. 什麼是浮動

當元素的<a href="http://www.php.cn/wiki/919.html" target="_blank">float</a> 屬性不為none 時就產生了浮動。

<p class="float">float</p>
.float {
  float: left;
  width: 100px;
  height: 100px;
  background-color: #ddd;
}

2. 浮動的影響

  1. 浮動會使元素脫離文件流,具體表現為:

  • 父元素高度塌陷,即不會包含浮動元素。
    例如上面的程式碼就會表現為

    浮動的定義與浮動的清除(BFC)

    父元素高度塌陷

  • 文字環繞。

    浮動的定義與浮動的清除(BFC)

    文字環繞效果


    #可以注意到這裡.normal元素的寬度覆蓋了.float元素,但是.float元素下是沒有文字的,也就是說文字被「擠」出來了,這是因為它雖然會脫離文檔流,但是不會脫離文字流。這個效果也是float屬性的本意。其程式碼如下:

    
      <p class="float">float</p>
      

    正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素

    body {
      background-color: #ccc;
    }
    .float {
      float: left;
      width: 100px;
      height: 100px;
      background-color: #ddd;
    }
    .normal {
      background-color: #fff;
    }
  • 浮動元素的外邊距不會合併。
    關於外邊距合併的相關內容可以戳這裡。

  • 元素一旦浮動便會變成行內塊元素,即 <a href="http://www.php.cn/wiki/927.html" target="_blank">display</a>: inline-block

  • 3. 浮動的應用

    • 上面提到的文字環繞。

    • 寫一個三列佈局,左右固定寬度,中間自適應。

      <body>
        <p class="left float">left</p>
        <p class="right float">right</p>
        <p class="mid">自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素</p>
      </body>
      body {
        background-color: #ccc;
      }
      .float {
        float: left;
        width: 100px;
        height: 100px;
        background-color: #ddd;
      }
      .left {
        float: left;
      }
      .right {
        float: right;
      }
      .mid {
        height: 100px;
        background-color: #fff;
        margin: 200px; /*故意加上了上下 margin 值*/
      }

      這裡我故意加上了上了margin 值,可以看到效果:

      浮動的定義與浮動的清除(BFC)

      三列佈局

      body 也跟著.midmargin 往下掉了,這點可以用前面介紹的外邊距合併來解釋。

      ps:我第一次自己寫這個三列佈局的時候,html 是這樣寫的

      <body>
        <p class="left float">left</p>
        <p class="mid">自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素</p>
        <p class="right float">right</p>
      </body>

      如上把中間自適應的元素寫在中間,其實這樣比較符合邏輯,但如果這樣寫是行不通的,右邊的元素會掉下來,因為.mid 元素是區塊級元素,會佔滿整行,.left 不會掉下來是因為它本來就是脫離文文檔流的浮動元素。

    清除浮動

    在子元素上清除

    #這裡我只寫不會產生無意義標籤的方法。

    • 浮動元素後面若有兄弟元素,則可以在給它的兄弟元素加上clear屬性。
      如文字環繞那部分程式碼,給 .normal 加上 clear:leftclear:bothclear 的具體用法這裡不做過多贅述。

    • 為要清除浮動的元素加上偽類別或偽元素。

      .float::after {
        content: &#39;&#39;;
        display: block;
        visiability: hidden;
        height: 0;
        clear: both;
      }

      關於 ::after 的使用可以看 MDN 的文檔。

    在父元素上清除,即BFC

    BFC(Block Formatting Context),即區塊級格式上下文,它的官方解釋是:

    浮動、絕對定位元素(positionabsolutefixed)、行內區塊元素display:inline-block、表格儲存格display:table-cell、表格標題display:table-caption 以及overflow 屬性值不為visible 的元素(除了該值被傳播到視點viewport 的情況)將會建立一個新的區塊級格式化上下文。

    總結來說它要滿足下列條件之一:

    1. float 不為none

    2. #position 不為staticrelative

    3. display table-celltable-captioninline-blockflexinline-flex

    4. overflow 不為visible

    只要給父元素加上以上任一屬性滿足條件,也就是給父元素加上BFC 就能清除子元素的浮動。

    【相關推薦】

    1. 免費css線上影片教學

    2. css線上手冊

    #3. php.cn獨孤九賤(2)-css影片教學

    #

    以上是浮動的定義與浮動的清除(BFC)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn