close

轉自:http://www.cnblogs.com/mizzle/archive/2011/07/14/2105961.html

 

css清除浮動各種方法:

1,在浮動元素後面增加<br/>標籤;

  <br/>標籤有自帶的清除浮動屬性;

2,在浮動元素後面增加一個清除浮動層;

  <div>

    <div style="float:left"></div>

    <div style="float:left"></div>

    <div style="c​​lear:both"></div>

  </div>

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 的話,應該讓他們不折疊(雖然這種情況並不常見) 。

 

 
 

兩種情況

清除浮動包括清除子元素的浮動和清除上級元素的浮動,其中清除上級元素的浮動,只需設置clearboth就可以了,而清除子元素的浮動則可以用空標籤法、clearfix方法或overflow方法。因清除上級元素的浮動比較簡單,而空標籤法清除子元素浮動會增加額外標籤,所以在這裡主要說clearfix方法、overflow方法及偶然發現的inline-block方法。

為什麼要清除浮動

 一個塊級元素的高度如果沒有設置height,那麼其高度就是由裡面的子元素來撐開的,如果子元素使用浮動,脫離了標準的文檔流,那麼父元素的高度會將其忽略,你可以使用firebug查看下如果不清除浮動,父元素會出現高度不夠,那樣如果設置border或者background都得不到正確的解析

清除子元素浮動clearfix方法

Html代碼

<ul id="demo1" class="nostyle demo clearfix">
<li><img alt="img1" src="http://placehold.it/150/ffffff/00c5e3&amp;text=demo"></li>
<li><img alt="img2" src="http://placehold.it/150/ffffff/00c5e3&amp;text=demo"></li>
<li><img alt="img3" src="http://placehold.it/150/ffffff/00c5e3&amp;text=demo"></li>
</ul>

Css代碼

/*简洁版*/
.clearfix:before, .clearfix:after {
	content:"";
	display:table;
}
.clearfix:after{
	clear:both;
	overflow:hidden;
}
.clearfix{
    zoom:1;
}
/* 经典版 */
.clearfix:after {
    visibility: hidden;
    display: block;
    font-size: 0;
    content: " ";
    clear: both;
    height: 0;
}
* html .clearfix             { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */


清除子元素浮動溢出方法

Css代碼

/* overflow:auto */
#demo2{
	overflow:auto;*zoom:1;
}
/*或 overflow:hidden */
#demo2{
	overflow:hidden;*zoom:1;
}

注:這種方法主要是對父元素設置css,所以不需要加個class,下面的inline-block方法相同,只需設置父元素的css即可

 

清除子元素浮動inline-block的方法

注:這個方法是我在寫本文的時候發現的,完美相容流覽器,因為是偶然發現的,還沒有大量運用,所以暫作推薦,有興趣的可以私下測試,當然它清除的子元素浮動和前面兩種還是有點差別的,細心的你早就發現了,前面兩個demo比下面的這個demo寬度要大啊呵呵,inline-block正常表現

Css代碼

#demo3{
	display:inline-block;*display:inline;*zoom:1;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jillyz 的頭像
    jillyz

    桔子舖

    jillyz 發表在 痞客邦 留言(0) 人氣()