父元素如何圍住浮動(dòng)子元素

當(dāng)元素使用float屬性,將脫離文檔流,因此父元素便不會(huì)包圍它。

<section>
      <div class="左欄">
        我是左欄
        我是左欄
        我是左欄
        我是左欄
      </div>
      <div class="右欄">
        我是右欄
      </div>
</section>
<footer>我是頁腳</footer>

CSS樣式如下:

section{
  border: 1px solid #333333;
  margin:0 0 10px 0;
}
.左欄{
  width: 100px;
  border: 1px solid #333333;
}
footer{
  border: 1px solid #333333;
}

此時(shí)瀏覽器中顯示:

圖1.這是常規(guī)文檔流,可以看到塊級(jí)元素section包圍左欄和右欄元素,頁面自上而下堆疊在一起

當(dāng)對(duì)左欄加入css樣式:float:left;瀏覽器中顯示變?yōu)?/strong>

圖2.浮動(dòng)左欄后,父元素section只能包住右欄,因?yàn)樽髾谝呀?jīng)脫離了文檔流,于是footer也被提了上來,緊挨著前一個(gè)塊級(jí)元素section

如果想父元素仍然要包圍浮動(dòng)的子元素,有三種方法:

  1. 為父元素設(shè)置overflow:hidden
    將section設(shè)置為:
section{
      border: 1px solid #333333;
      margin:0 0 100px 0;
      overflow: hidden;
}
圖3.給父元素應(yīng)用了overflow:hidden后,父元素又包圍了浮動(dòng)的左欄

這是overflow除了常規(guī)應(yīng)用的另一個(gè)作用,它可靠的迫使父元素包含其浮動(dòng)的子元素。
2.同時(shí)浮動(dòng)父元素
第二種促使父元素包圍子元素的方法是讓父元素也浮動(dòng)起來。

section{
      border: 1px solid #333333;
      margin:0 0 10px 0;
      float:left;
      width: 100%;
}

浮動(dòng)section后,不管子元素是否浮動(dòng),它都會(huì)緊緊包圍住自己的子元素。因此,需要用width:100%再讓section與瀏覽器同寬。
????此時(shí)由于section也脫離了文檔流,footer會(huì)努力向上擠到它旁邊,因此給footer應(yīng)用clear:left;這樣即可和第一種方法取到同樣的效果。
3.添加非浮動(dòng)的清除元素
????第三種方法是給父元素最后添加一個(gè)非浮動(dòng)的子元素,然后清除該子元素。由于父元素一定會(huì)包含非浮動(dòng)的子元素,通過把這個(gè)子元素放在浮動(dòng)元素的下方,就可以保證父元素一定會(huì)包住這個(gè)元素,同時(shí)也會(huì)包住前面的浮動(dòng)元素。

<section>
      <div class="左欄">
        我是左欄
        我是左欄
        我是左欄
        我是左欄
      </div>
      <div class="右欄">
        我是右欄
      </div>
      <div class="clear_me">        
      </div>
</section>
<footer>我是頁腳</footer>

給新添加的元素添加CSS樣式:

.clear_me{
  clear:left;
}

這樣,浮動(dòng)的元素就被父元素包圍住了,如圖3所示。

如果不想添加這個(gè)純表現(xiàn)性的元素,還有一個(gè)用CSS來添加這個(gè)清除元素的方法。
首先,給section添加一個(gè)類

<section class="clearfix">
      <div class="左欄">
        我是左欄
        我是左欄
        我是左欄
        我是左欄
      </div>
      <div class="右欄">
        我是右欄
      </div>
</section>

接著給這個(gè)clearfix類使用這個(gè)規(guī)則:

.clearfix:after{
    content: ".";
    display: block;
    height: 0;
    visibility: hidden;
    clear: both;
}

這樣,浮動(dòng)的元素又像圖1一樣被父元素包住了。這個(gè)clearfix規(guī)則最早是由程序員Tony Aslett發(fā)明的,它只添加了一個(gè)內(nèi)容為句點(diǎn)的元素(句點(diǎn)是最小的內(nèi)容)。

總結(jié)一下
強(qiáng)迫父元素包含其浮動(dòng)子元素的方法有三種:

  1. 為父元素設(shè)置overflow:hidden;
  2. 浮動(dòng)父元素,并且設(shè)置寬度width:100%;其后的元素要設(shè)置clear:both;
  3. 父元素內(nèi)容末尾添加非浮動(dòng)子元素,可以直接加一個(gè)空元素,也可以使用clearfix偽類添加。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,168評(píng)論 1 92
  • 第一次電話面試,面試哥哥問我你都知道哪些去除浮動(dòng)的辦法?我是這樣回答的“有兩種方法,一種是在需要去除浮動(dòng)的元素上使...
    Miss____Du閱讀 1,734評(píng)論 0 13
  • 這篇文章極好,以至于讓我受益良多,就一字沒有改動(dòng)的轉(zhuǎn)發(fā)過來一絲冰涼老師的文章 需要注意的是,display:tab...
    新晉小牛牛閱讀 1,133評(píng)論 0 2
  • 一、文檔流的概念指什么?有哪種方式可以讓元素脫離文檔流? 1、文檔流指的是元素在排列布局中所占用的位置,具體的說是...
    鴻鵠飛天閱讀 842評(píng)論 0 0
  • #復(fù)盤第6天# 閱讀 今早照例聽羅輯思維的周五上新,羅胖講到時(shí)間壁壘是最堅(jiān)固的,因?yàn)橐粫r(shí)半會(huì)兒無法超越,而其他的都...
    O布布O閱讀 463評(píng)論 0 2

友情鏈接更多精彩內(nèi)容