前端的清除浮動?
看到一個關於清除浮動的解決方案:width:100%+overflow:hidden;這裡為什麼需要這樣設置,原理是什呢?
是直接在父元素上設置`overflow:hidden`就可以清楚浮動。
這個主要是因為BFC(塊格式上下文),給你開個小灶:
BFC(Block Formatting Contexts)直譯為"塊級格式化上下文",是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面的元素。
BFC 有三個特性:
1. BFC會阻止垂直外邊距(margin-top、margin-bottom)摺疊。
2. BFC不會重疊浮動元素。
3. BFC可以包含浮動。
註:利用第一條特性可以防止外邊距合併,利用第三條特性可以達到「清除浮動」的目的。
觸發BFC的方式:
1. float 為 left|right
2. overflow 為 hidden|auto|scroll
3. display 為 table-cell|table-caption|inline-block
4. position 為 absolute|fixed
但是這種設置方法也會有一些副作用,以後慢慢體會了:
1. `float`為 `left`|`right`
將父元素設置成浮動,從而清除子元素的浮動。副作用是父元素變成浮動元素了,難道要整個布局都浮動?雖然有助於減少或消除不必要的標記,但浮動會變得很複雜,一些老式瀏覽器在處理有許多浮動元素的布局時有困難。
2. `overflow`為 `hidden`|`auto`|`scroll`
在某些情況下會產生滾動條或截斷內容的現象。
3. `display`為 `table-cell`|`table-caption`|`inline-block`
無法兼容低版本IE。
4. `position`為 `absolute`|`fixed`
改變了元素的定位方法,如果定位方式不是我們需要的,則會很麻煩。
轉載請註明來源,版權歸碼蜂社所有。PS:記得點贊
原理是BFC(塊級格式化上下文)
@Shelley Lee 基本說的差不多了,不過低版本ie 有haslayout(觸發條件 zoom:1,行為與BFC類似)更方便所以不用太考慮兼容問題。
其實overflow:hidden就可以觸發BFC了,再加個width:100%怕不是要在某些奇怪的元素上用...
建議看看bootstrap的清除浮動,來自Nicolas Gallagher的microclearfix
A new micro clearfix hack – Nicolas Gallagher
/**
* 1、讓css偽元素能夠顯示
* 2、table能夠自動生成帶bfc的元素防止邊距合併與穿透
*/
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
/**
* 為舊IE準備的,觸發haslayout
*/
.cf {
*zoom: 1;
}
偽元素清除浮動有個隱含的缺點:就是把:before與:after全佔了,再要利用偽元素對元素本身進行裝飾就不方便了,不過現在用浮動布局已經不提倡了,所以瑕不掩瑜。
另外用空元素清除浮動已經不適合這個時代了,畢竟你總得為和你一起開發的同事著想吧。
想想看當你的同事看到一個網頁裡面出現幾十個&&
給父元素加一個偽元素類.clearfix:after{
display:block;
hight: 0;
overflow: hidden;
clear: both;
visibility: hidden;
}
這是我最常用的方式
我一般會在下面放一個空的div 設置style=「clear:both」
推薦閱讀:
※這是我的前端學習路線,大家幫忙看看有什麼不好的地方?
※CSS究竟是怎麼工作的?
※學了html和css,但是自己做靜態網頁布局的能力很差不知道怎麼提升?
※零基礎的人如何在一個月內做出令人驚訝的網站?