CSS的float浮動效果在某些情況下非常不穩定,控制不好的時候一般還是清除浮動為妙,這裡我們就來總結CSS浮動所差生的內容溢出問題及清除浮動的方法
拋一塊問題磚(display: block)先看現象:
在非IE瀏覽器(如Firefox)下,當容器的高度為auto,且容器的內容中有浮動( float為left或right)的元素,在這種情況下,容器的高度不能自動伸長以適應內容的高度,使得內容溢出到容器外面而影響(甚至破壞)佈局的現象。這個現象叫浮動溢出,為了防止這個現象的出現而進行的CSS處理,就叫CSS清除浮動。
引用W3C的例子,news容器沒有包圍浮動的元素。
.news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: rightright; }
<p class="news"> <img src="news-pic.jpg" / alt="總結CSS浮動所差生的內容溢出問題及清除浮動的方法" > <p>some text</p> </p>
#清除浮動:
##1,在浮動元素後面增加
標籤;
<br/>标签有自带的清除浮动属性;
#2,在浮動元素後面增加一個清除浮動層;
<p> <p style="float:left"></p> <p style="float:left"></p> <p style="clear:both"></p> </p>
3,為浮動元素新增overflow:auto樣式;
#4,設定最後一個浮動元素如下樣式:#
/* 清理浮动 */ .clearfix:after { visibility:hidden; display:block; font-size:0; content:" "; clear:both; height:0; } .clearfix { zoom:1; }其原理是,在「進階」瀏覽器中使用:after 偽類別在浮動區塊後面加上一個非display:none 的不可見塊狀內容來,並給它設定clear :both 來清理浮動。在 ie6 和 7 中為浮動區塊添加 haslayout 來讓浮動區塊撐高並正常影響文件流。
5,另一個簡潔的方法:
.cf:before, .cf:after { content:""; display:table; } .cf:after { clear:both; } .cf { zoom:1; }#原理還是一樣的。使用 :after 偽類來提供浮動區塊後的 clear:both。不同的是,隱藏這個空白使用的是 display: table。而不是設定 visibility:hidden;height:0;font-size:0; 這樣的 hack。 值得注意的是這裡中的 :before 偽類別。其實他是來用處理 top-margin 邊折疊的,跟清理浮動沒有太大的關係。但因為浮動會創建block formatting context,這樣浮動元素上的另而一元素上如果剛好有margin-bottom 而這個浮動元素剛好有margin-top 的話,應該讓他們不折疊(雖然這種情況並不常見) 。
以上是總結CSS浮動所差生的內容溢出問題及清除浮動的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!