测试页面兼容时,经常会遇到多余空白问题:IE6/IE7中li底部3px的Bug,img在IE6和IE7中导致父层DIV高度多了4px。
无论是IE6/IE7,还是IE8/FF/Opera/Chrome都存在这样的问题,只不过是产生的原因各不相同:IE6/IE7中的空隙是因为img前后的空格、换行、回车、缩进产生的;IE8/FF/Chrome/Opera则是line-height和font-size导致的。下面分别列举最常见的情况:
1、li-img
<li><img src="garden01.jpg" /></li>
<li><img src="garden01.jpg" /></li>
<li><img src="garden01.jpg" /></li>
</ul>
- li 的子元素包含图片元素(img),会导致li底部多余6px-7px的空隙
- 用vertical-align:top|middle|bottom都可以消除li底部多余的6px-7px空隙。兼容各个主流浏览器
- IE6/IE7以外的其它浏览器,还可以给img设置display:block来消除的多余6px-7px空隙,或者设置float:left|right来隐式将img设置成块状元素block
2、li-inline
<li><span>http://www.dovapour.com.cn/</span></li>
<li><span>http://www.baidu.com/</span></li>
<li><span>http://www.taobao.com/</span></li>
</ul>
li 的儿子元素是内联元素(inline),会导致li底部出现空隙。
解决办法1:将内联元素(inline)设置成display:inline-block。兼容各个浏览器。
解决办法2:将内联元素(inline)设置成display:block。另外再用zoom:1触发layout来兼容IE6。
3、li-block
<li><div>http://www.dovapour.com.cn/</div></li>
<li><div>http://www.baidu.com/</div></li>
<li><div>http://www.taobao.com/</div></li>
</ul>
<style type="text/css">
.list-float li{
width:300px;
}
.list-float div{
clear:left;
float:left;
background:#CCC;
}
</style>
当li设置了width,并且li的儿子元素设置了float:left|right和clear:both|left|right,会导致li底部出现3px-4px空隙。
解决办法:给li的儿子元素设置vertical-align:top|middle|bottom。
4、float-img
<ul>
<li><img src="garden01.jpg"></li>
<li><img src="garden01.jpg"></li>
<li><img src="garden01.jpg"></li>
<li><img src="garden01.jpg"></li>
<li><img src="garden01.jpg"></li>
<li><img src="garden01.jpg"></li>
<li><img src="garden01.jpg"></li>
</ul>
</div>
<style type="text/css">
.float-img{
width:600px;
background:#F1F1F1;
}
.float-img ul{
padding:10px;
zoom:1;
}
.float-img li{
float:left;
background:red;
}
.float-img img{
border:2px solid orange;
vertical-align:middle;
}
</style>
给li设置float:left|right,ul设置padding-top:10px;会导致IE6/IE7中每个li都增加了10px的垂直空隙。
解决方法:通过设置width、height、zoom等方法触发ul 的layout。
另外:将上面的ul和li 都替换成div也存在这个问题,看来这个bug不是li 独有的。
总结:多余空白问题都可以通过设置vertical-align:top|middle|bottom来解决。第4种情况有点特殊需要触发layout
null
用zoom:1;触发ie
IE6/IE7中li底部



