div+css常见浏览器兼容问题以及解决办法
1.图片下方出现几像素的空白间隙
问题说明:这个问题在ie6和ff(火狐)下经常见到,例如 <div><img
src=""/></div>这个图片下面会有一条空白间隙,
解决方法:给图上一个垂直方向的属性如:vertical-align:
top(任意一个就行middle);这个问题从而延伸到,object(视频)和textarea在火狐下也会出现类似的问题,解决方法一样。细心的朋友会发现在第二节ahuing的重置代码里就有这样一个全局定义object,textarea,img{vertical-align:
top;}
2.IE6双倍margin的BUG(双边距)
问题说明:这是ie6一个著名的bug,当一个元素向一边浮动时,其它同一个方向如果有margin的话,ie6就会产生双倍的margin。例如:<div
style="float: left;margin-left:
10px;"></div>在ie6下显示会有margin-left:20px的距离
解决方法:加个_display:inline:属性,例如<div
style="float: left;margin-left: 10px;_display:
inline;"></div>
3.ie6下的浮动元素和非浮动元素间出现3像素BUG
问题说明:这也是ie6一个著名的bug,当一个元素浮动时,同级别的文字没有浮动,在ie6下它们之间就会产生3个像素的bug。例如:<div><img
src=""/>摘要摘要摘要摘要</div>,图片和文字就会出现3像素
解决方法:方法一,两个元素都浮动,如:<div><img
src=""/><span style="float:
left;">摘要摘要摘要摘要</span></div>;方法二,这种设计时一般图片和文字要有间隙的,做个ie6的hack就行,如:<div><img
src=""/><span style="margin-right: 5px;
_margin-right:
2px;">摘要摘要摘要摘要</span></div>
4.li在IE中底部空行
问题说明:当li里面有两个以上的浮动元素时,li的下面就会产生一条空白间隙,例如
<ul
class="tlist">
<li><span style="float:
left;">栏目</span><a href="#"
target="_blank">标题标题标题</a></li>
</ul>
解决方法:这个问题和第一个问题很相似,解决方法也是一样,在li上加个垂直方向的属性,例如:
<ul
class="tlist">
<li ><span
>栏目</span><a href="#"
target="_blank">标题标题标题</a></li>
</ul>
5.IE6样式中文注释后引发失效
问题说明:这是ie6
出现的奇怪现象。这是由于css 和html 的编码不同所引致,满足下面条件就会引起注释下面的样式不起作用:
1). css有中文注释
2).
css为ANSI编码
3). html为utf-8编码
解决方法:
1).
去掉中文注释,用英文注释或者多打几个“*”,这是ahuing在之前的教程里提到的,例如: /*** 注释 ***/
2). 统一css 和 html
的编码
建议采用第二种解决方法。ps: css为uft-8 html 为ANSI
貌似不会出现失效的情况。
6.IE6出现重复字符(文字溢出)
问题说明:一个容器包含2两个具有“float”样式的子容器,第二个容器的宽度大于父容器的宽度,或者父容器宽度减去第二个容器宽度的值小于3,在第二个容器前存在注释(这也是为什么此bug也叫做“IE6注释bug”的原因)。例如下列代码:
<!DOCTYPE
html PUBLIC "-//W3C//liD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/liD/xhtml1-transitional.lid">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=gbk"
/>
<title>标题</title>
<style>
*{margin:
0;padding: 0;font-size: 12px;}
.a{width:205px;}
.b{float: left;width:
50px; background: black;color: #fff;margin-right: 5px;overflow:
hidden;}
.c{float: left;width: 150px;background:
red;}
</style>
</head>
<body>
<div
class="a">
<div
class="b">测试测试测试测试测试测试测试111111111111</div>
<!-- 注释
-->
<div
class="c">测试测试测试测试测试测试测试2222222222</div>
</div>
</body>
</html>
解决方法:
为何会出现重复文字,谁也没说清楚,包括官方,这个问题,ahuing只在给朋友调试样式时见过,自己写的代码没见过,所以认识这个bug有点晚,ahuing个人认为,ie6将注释也当成内容存在。
如何消灭重复文字,只要让上面任何一个条件不满足即可,
改变结构,不出现【一个容器包含2两个具有“float”样式的子容器】的结构。
1).减小第二个容器的宽度,使父容器宽度减去第二个容器宽度的值大于3。
2).去掉所有的注释。
3).在第二个容器后面加一个或者多个<div
></div>来解决。
4).给溢出文字的标签加position: relative;属性
6.png图片在IE6下出现透明或背景变灰的bug;
问题说明:这里的png图片是指32位和24位的,8位的png图片透明ie6是支持的。
解决方法:
1)使用滤镜,语法如下
.image-style
{ background-image:
none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="filename.png",
sizingMethod="scale");
}
注意:使用滤镜需要损耗性能。
2)给IE6单独制作一张.gif图片(或者8位的png图片),打上hack
.image-style{
background:transparent url("filename.png") no-repeat scroll 0
0;_background-image:url("filename.gif");
}
这种方法只需要在切图时多存储一份.gif格式的图片,一般采用这种方法。
7.让position:absolute弹出层在flash上面
<object class>&nbps;</div>