雖然IE6慢慢的退出市場了,可是仍是有必要了解一些兼容問題,讓本身的知識有一個更好的沉澱。margin-bottom的bug是容器div的 'zoom:1' 觸發了 hasLayout,其內部浮動子元素也參與到了容器的高度計算之中。html
在 IE6 IE7 IE8(Q)中,容器div的 'zoom:1' 觸發了 hasLayout,其內部浮動子元素也參與到了容器的高度計算之中。可是浮動子元素設置的 'margin-bottom' 消失;瀏覽器
在其餘瀏覽器中,容器的 'overflow:hidden' 建立了新的 Block Formatting Context ,一樣,其內部浮動子元素也參與到了容器的高度計算之中。浮動子元素的四個方向的 margin 均正常。spa
例子:第一個div子元素設置了底部的margin值,在清除浮動以後無效code
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>浮動元素的影響</title>
<style>
*{margin: 0;padding: 0;}
.con-float-box{
width: 600px;
border: 1px solid #f00;
}
.con-float-box div{
float: left;
width: 198px;
height: 98px;
margin: 20px 0;
border: 1px solid #00f;
}
.box-pos{
width: 600px;
height: 100px;
margin-top: 10px;
border: 1px solid #000;
background: #ccf;
}
.clearfix:before,.clearfix:after {
content: "\200B";
display: block;
height: 0;
overflow: hidden;
}
.clearfix:after {clear: both;}
</style>
</head>
<body>
<div class='con-float-box clearfix'>
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</div>
<div class='box-pos'>爲第一個div設置了清除浮動的類clearfix,進行了相應的處理,此時,在谷歌瀏覽器當中正常,可是在IE6,依舊不正常,第7和第8個塊底部的margin沒有生效。</div>
</body>
</html>
解決方案orm
爲容器顯式地設置高度。若容器高度不定,則要避免在觸發了 hasLayout 的容器內的浮動子元素上設置 'margin-bottom' 特性,能夠經過爲容器設置 'padding-bottom' 達到類似的效果。htm
只要不一樣時觸發父元素hasLayout、子元素左浮動、左浮動子元素擁有非零的 margin-bottom 值,這三個條件中任意一項,都可解決此問題。it
以上就是今天E良師益友網對定義了浮動元素後margin-bottom失效的解決辦法詳解了。class