css清除浮動

 

前言

浮動會導致父元素塌陷(子元素脫離標準流,父元素無法被子元素撐開),清除浮動是一個很常見的問題,這裏暫列一下個人認爲最優的方法~

實現

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html,body{
height:100%;
margin:0;
padding:0;
}
.parent{
background-color:yellow;
margin: 0 auto;
width:500px;
}

.left{
background-color:blue;
width:100px;
height:200px;
float:left;
}
.right{
background-color:red;
height:200px;
width:100px;
float:right;

}
.clearFloat:after{/*清除浮動*/
display:block;
clear:both;
content:"\200B";
height:0;
}
.clearFloat{
zoom:1;
}
</style>
</head>

<body>
<div class="parent clearFloat">
  <div class="left">
左邊
  </div>
  <div class="right">
右邊
  </div>
</div>
</body>
<html>

效果如下:

和諧不和諧?像不像家長牽着倆寶寶幸福的在一起~

然而!清除浮動的關鍵在於我定義的那個clearFloat樣式,我們把parent的clearFloat樣式去掉後,就會出現父元素塌陷的情況,如圖:

看見沒,兩個寶寶的家長消失了o(╥﹏╥)o!!

我們趕緊來單獨看看clearFloat這個樣式:

.clearFloat:after{/*清除浮動*/
display:block;
clear:both;
content:"\200B";
height:0;
}
.clearFloat{
zoom:1;
}

after是僞元素,相當於是在parent div的後面追加了一個div,這個div用於清除浮動(也就是負責讓父元素檢測到子元素的高度);

1)display:block 讓生成的元素佔滿剩餘空間(after默認僞元素是inline的)

2)clear:both 清除浮動

3)content:"\200B" 這是Unicode字符裏的一個零寬度空格,本身不可見~

4)height:0 避免生成的內容破壞原有佈局的高度!

5)zoom:1 兼容IE6,7滴

個人心得

清除浮動的方法很多,各有利弊,個人認爲這是最通用而且兼容性好的一個方法,就記下來實現了一下;說實話剛看到這個解決方案,是較其他方案來說最難理解原理,或者代碼最多的一種(你可以想想,有的方法給parent一個height,或者parent裏面加空div帶個clear就完事了~),但也是最優的!定義了這樣一個類,需要清除浮動的地方給他加上就行,是不是很通用~!當然,筆者經驗有限,大家要是有更好的方法歡迎跟我討論分享下~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章