若是對於浮動不熟悉的同窗,能夠看看介紹float的文章。傳送門:CSS floathtml
咱們知道,在一個父元素內若是遇到某個浮動元素,此時父元素的高度會發生塌陷。針對父元素高度塌陷的問題,如今已經有了不少的解決方案。針對每個方案,咱們來進行深度的剖析。瀏覽器
這種方法比較容易,可是要注意的是這個空元素必須是一個塊級元素,不能是行內元素或者是行內塊元素。缺點就是多了一些沒有意義的標籤。代碼以下。markdown
//HTML <div class="content"> <div class="float"> </div> <div class="clearfix"></div> //用於清除浮動的元素必須是塊級元素 </div> //CSS .content { background:pink; } .clearfix { clear: both; } .float { width: 50px; height: 50px; float: left; background: tan; }
之因此可使用clear屬性清除浮動帶來的額外影響,還要回歸clear屬性的本質。post
clear屬性規定元素的哪一側不容許其餘浮動元素。spa
本質:在CSS2.1中,clear屬性會給清除元素(即設置了clear屬性的元素)的上外邊距之上添加清除空間,而元素自己的外邊距並不改變。再說的詳細一些,也就是給元素設置clear:left|right|both
時,會使清除元素的上外邊距邊界恰好在該邊上浮動元素的下外邊距邊界之下。code
在父元素中設置overflow:hidden|auto|scroll
能夠解決父元素高度塌陷的問題。爲何能夠經過overflow來解決父元素高度塌陷的問題?這裏涉及到了另一個知識點,也就是BFC(塊級格式化上下文),先看解決方法。原理下篇文章分享。htm
父元素設置: overflow:hidden|auto;
blog
下面是設置overflow前和overflow後的效果圖文檔
在父元素上增長:after僞元素,能夠解決父元素高度塌陷的問題。get
//HTML <div class="content"> <div class="float"> </div> <p>會給覆蓋嗎?</p> </div> //CSS .content { background: tan; &:after { content: '.'; display: block; clear: both; height: 0; visibility: hidden; } } .float { width: 100px; height: 100px; float: left; background: olive; }
放到瀏覽器上,父元素高度正常顯示。
要理解僞元素解決父元素高度塌陷的方案,須要知道額外的一些知識。
什麼意思呢?其實仔細思考仍是挺好理解的。這裏放上一段代碼解釋前三點。
//HTML與上面的相同,將div換成了span,class換成了float-inline。 //CSS .float-inline { float:left; width:100px; height:100px; background:pink; }
相應的效果以下。
此時,能夠設置寬高說明了內聯元素span的行內框變成了塊框。同時,在浮動元素同級的下一個元素是具備文本內容的,此時文字就會環繞在float元素的周圍。由於浮動元素的存在,父元素高度塌陷了。
僞元素,顧名思義是一個在某個元素以後添加內容。
ok,到這裏。咱們就已經掌握了理解:after僞元素清除浮動所須要的知識了。放上解決方案。按順序剖析。
.clearfix: { zoom:1 } //觸發IE的haslayout. .clearfix:after { content: '.'; display: block; clear: both; height: 0; visibility: hidden; }
這裏介紹了三種清除浮動帶來的額外影響的三種方法,這裏所說的額外影響指的是浮動元素給兄弟元素和父元素帶來的影響。這裏作一個小小的總結:
overflow:hidden|auto
,此時也能夠達到清除浮動的效果。這裏涉及到BFC的概念,下一篇文章分享。