您的位置:首页 > 其它

工作中遇到的IE6兼容性问题及解决办法

2014-12-22 17:05 429 查看
1、解决IE6下元素左浮动自动换行的问题



解决:元素左浮动,宽度自适应;CSS:display: inline-block;overflow: hidden;white-space: nowrap;

2、IE6默认行高12px,高度低于12px的小图标背景时,高度失效

解决:PS做图时适当增大高度,或者图标间的空白像素。

3、设置某些标签例h3的固定宽度,IE6下可能会折行

解决:原因在于IE6对宽高长度解析不同,取消固定宽度的设置。

4、input标签的光标上下居中,IE6下光标位于左上角

解决:使用margin设置居中,line-height不适用IE6。

5、 IE6不支持高度小于12px的标签,小于12px则按12px计算。

6、 IE6不支持important。

7、IE6不支持背景图透明(默认透明部分显示为灰色)



解决1:使用png-8格式图片(有时候会有锯齿等问题);

解决2:在png背景的元素css中添加微软特有的滤镜;

.png24{_background: none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='wx_bg24.png');}

此图片路径若为相对路径,则是html文件的相对路径,而不是css文件的相对路径。

滤镜资源消耗大,较多图片时会使页面无法使用,最好不要大量使用。

png-8能满足大部分需要,还比较小,所以尽量使用png-8。

解决3: DD_belatedPNG.js

<!--[if IE 6]>

<script src="<?php echo getCdnUrl('pd/www/index/v14/js/DD_belatedPNG.js?t=141024.js')?>"></script>

<script type="text/javascript">

DD_belatedPNG.fix('.health .s_bg');

</script>

<![endif]-->

8、IE6只支持a:hover伪类,其他标签(div,li...)的:hover均不支持;

解决1:直接使用JS控制hover效果;

解决2:使用JS动态控制添加.hover类,再定义该类下的样式(使用较多);

9、关于绝对定位的top,left位置的显示差异

解决:使用IE6的CSS hack:_top,_left

10、IE6下浮动双边距

解决1:display:inline(使用较多);

解决2:CSS hack:_margin-left;

11. IE6不支持下拉框select的高度定义(支持宽度)

解决1:用div模拟select标签,定义该div标签的宽度,再添加下三角的背景图(使用较多);

解决2:可在select标签外再添加一层div标签,在该div标签内使用IE6的CSS hack定义合适的高度,同时select标签本身适当增加IE6的CSS hack属性定义。

12、IE6下不支持border-color设置为transparent时由css定义的三角形;

解决1:直接将小三角切图,作为背景图使用;

解决2:不使用transparent,颜色设置为#fff货其他固定背景色(通过于背景融合来隐藏边框);

解决3:IE6浏览器不支持transparent透明属性,不过没有关系,就border生成三角技术而言,直接设置对应的透明边框的border-style属性为dotted或是dashed即可解决这一问题。

13、 IE6不支持min-height

解决1:height:auto!important;

height:100px;

min-height:100px;

解决2:min-height:50px;

_height:50px;

(overflow:visible;)

14、当inline-block和text-indent遇到IE6,IE7:

在实际应用中,考虑到seo,很多button,icon都要用到inline-block和text-indent来处理,例如:Button

css我习惯写成这样: .btn{display:inline-block; width:100px; height:23px; text-indent:-9999px;background-image:url(img.jpg);}

在标准浏览器下是没问题的,但是在IE6和7下会触发A标签消失的bug。

解决1:display:inline-block; 改为 display:block; 然后再做布局处理。

解决2:text-indent:-9999px; 改为 font-size:0; line-height:0; 或者各种可以隐藏掉内容元素的方法。

解决3: Button 在按钮前面增加任何元素,都可以让消失的按钮重新出现。

解决4:给元素加 position:absolute;

PS:inline或inline-block元素设置text-indent在IE6/IE7中显示不正常的bug致使text-indent会传递到父及元素,也就出现了上文中的结果。造成这种情况的原因应该是IE6/IE7并没有真正实现inline-block,而是通过设置display:inline-block触发了IE的layout,从而使内联元素拥有了inline-block属性的表症。考察元素的默认样式,可知:input、select、button、textarea的默认display皆为inline-block,所以在布局时应加以注意。

/*20150617*/

1.IE6下出现内容断裂,多出一些汉字:

div模拟下拉列表:<div class="ly_detail"><a href=#>11</a><a href=#>22</a></div>

原样式:

.ly_detail{display:none;position:absolute;top:36px;left:1px;z-index:5;width:87px;}

.ly_detail a{display:block;padding-left:10px;

float:left;

width:100%;

height:23px;

background:#fff;

}

新样式:

.ly_detail {display: none;position: absolute;top: 36px;left: 1px;z-index: 5;width: 98px;

background: none repeat scroll 0 0 #fff;}

.ly_detail a {display: block;padding-left: 10px;

float: none;

line-height: 1.8;

}

IE6经典bug之一,问题可能存在于:元素的宽、高、浮动、定位等,需一一排除;

写法规范,即可避免问题。

2.IE6/7下,input标签背景采用定位,当输入内容超出标签宽度时,背景左移至消失。

解决办法:

1.使用hack添加属性*background-attachment:fixed;同时模拟背景颜色,例如#fff.

使用了fixed后,背景固定,原先背景定位已经失效,此方法只适合背景单色单一的情况(http://www.top.800hr.com使用此方法)。

2.使用外层div来添加背景,input标签本身并没有背景。

<div style=”background:#fff url(image.jpg) no-repeat 2px 2px;width:150px;”>

<input name=”" type=”text” style=” border:0; background:none;” />

</div>

原始:background: url("http://my.healthr.com/css/indeximg/bg_new.gif") no-repeat;

修改:background: #fff url("http://top.800hr.com/img/search_btn_bg.png") no-repeat fixed;

3.解决IE6不识别min-宽高问题

html>body .one{width:auto;height:auto;min-width:80px;min-height:35px;}

.one{width:80px;height:35px;background:#f00;border:1px dotted #00f;}

(两行样式顺序不限)

高版本解析css结果:width:auto;height:auto;min-width:80px;min-height:35px;background:#f00;border:1px dotted #00f;

IE6解析css结果:width:80px;height:35px;background:#f00;border:1px dotted #00f;

IE6 不支持min-height属性,但它却认为height就是最小高度。解决方法:

使用ie6不支持但其余浏览器支持的属性!important。

#container{min-height:200px; height:auto !important; height:200px;}

4.如何对齐文本与文本输入框 加上 vertical-align:middle;

<style type="text/css"> <!-- input { width:200px; height:30px; border:1px solid red; vertical-align:middle; } --> </style>

5.为什么无法定义1px左右高度的容器 IE6下这个问题是因为默认的行高造成的,解决的方法也有很多。

例如:overflow:hidden | zoom:0.08 | line-height:1px

6.IE6绝对定位元素的1像素间距bug

IE6下的这个错误是由于进位处理误差造成(IE7已修复),当绝对定位元素的父元素高或宽为奇数时,bottom和right会产生错误。唯一的解决办法就是给父元素定义明确的高宽值,但对于液态布局没有完美的解决方法。

7.Overflow Bug

在IE6/7中,overflow无法正确的隐藏有相对定位position:relative;的子元素。解决方法就是给外包容器.wrap加上position:relative;

8.横向列表宽度bug

如果使用float:left把<li>横向摆列,并且<li>内包含的a标签或其他标签触发了haslayout,在IE6下就会有错误的表现。

解决方法很简单,只需要给内部的a或其他标签定义同样的float:left即可。

9.文本重复Bug

在IE6中,一些隐藏的元素(如注释、display:none;的元素)被包含在一个浮动元素里,就有可能引发文本重复bug。

解决办法:给浮动元素添加display:inline;。

10.链接去边线(完全兼容) a,a:hover{outline:none; blur:expression(this.onFocus=this.blur());}

11.页面内容在IE6偏左,解决办法设置body标签text-align:center。

12.IE6,7元素偏移原位置上移

第一种情况:

<td><span></span></td>

td{background:#fff;border-bottom:1px solid #dbdce9;padding:3px 4px;}

span{display:block;float:left;width: 80px;height: 18px;cursor: pointer; background:url("img/u80.png") no-repeat scroll 65% 3px;}

其中span标签的float:left;不能少,否则IE6,7下内容偏离td标签上移。

第二种情况:

<div class="xf_posbtn pos_old clearfix">

<a href="/xunfang/addjob" class="xf_old active">选择已有职位,发起寻访<i></i></a>

<a href="/xunfang/addnewjob" class="xf_new">创建新的职位,发起寻访<i></i></a>

<span class="xf_line"></span>

</div>

.xf_posbtn{width:675px;padding:0 0 0 25px;}

.xf_posbtn a{display:inline-block;float:left;width:170px;height:37px;text-indent:-9999px;background-image:url(img/xf_btn_bg.png);background-attachment:no-repeat;}

.xf_posbtn .xf_line{width:100%;display:block;float:left;margin:15px 0 0;border-top:2px solid #5f608f;}

.xf_posbtn .active{position:relative;}

.xf_posbtn .active i{position:absolute;top:44px;left:50%;display:block;width:11px;height:8px;margin:0 0 0 -5px;overflow:hidden;

background:url(img/xf_btn_bg.png) no-repeat -159px -39px;}

active类相对定位,i标签绝对定位并加背景图标。其他浏览器均正常,只有IE6,7左边第一个a标签(含内部i标签)整体偏离外层div左上移动。

解决办法:外层div也加上相对定位:.xf_posbtn{position:realtive;width:675px;padding:0 0 0 25px;}

13.IE6下设置行高小于12px

设置固定高度后必须加上:overflow:hidden;

i{width:11px;height:8px;overflow:hidden;.....}

14.IE6,7表格td里含有a标签的显示问题

第一种情况:

<td nowrap="nowrap" rowspan="2"><a href="##">导出简历</a></td>

td{padding:3px 4px;border-bottom:1px solid #dcdcdc;background:#fff;}

a{color:#ccc;}

其他各浏览器显示正常,IE6,7中a标签的文字"导出简历"出现截断,下半部分不显示

由于td是占两行,但IE6,7看似只显示在上面一行,所以解决办法如下:

a{display:inline-block;height:30px;padding:8px 0 0;*padding:0;}

设置内边距是保持高版本浏览器显示文字上下居中,而IE6,7不需要偏移。

第二种情况:

<td colspan="9">

<input type="checkbox" id="selAll" onclick="selectAll()"> 全选

<a onclick="exportmore()" class="btn long automenu" style="float:right;" href="###">批量导出简历</a>

</td>

td中含有块状a标签,在IE6,7下a标签折行右浮动,即显示在input标签的右下角。

尝试方法1:td相对定位,a绝对定位。高版本正常,IE6,7下a标签高度大于td,但无法撑开td;所以需要必须设置td的高度。

问题:td相对定位后,高版本正常,IE6,7下本身位置上移一点,盖住上层td的下边框线。

尝试方法2:将所在行tr相对定位

问题:chrome中块状的a标签跑到浏览器窗口的左上方

最终解决办法:input外加label,块状显示,与a同样左浮动

<td colspan="9">

<label style="display:block;float:left;" for="selAll"><input type="checkbox" id="selAll" onclick="selectAll()"> 全选</label>

<a onclick="exportmore()" class="btn long automenu" style="float:left;margin:0 0 0 10px;" href="###">批量导出简历</a>

</td>

15.解决IE兼容模式下无法撑开高度的问题

<div id="right" style="height:960px,padding-left:1px;">

<dl>

<dd></dd><dd></dd><dd></dd>

</dl>

<div><input type="button"></div>

</div>

div#right的高度JS根据其内容来设定,但有些IE兼容模式下无法识别JS设定的高度,导致内容与页面底部内容重叠。

解决办法:div#right{height:auto !important;}

!important优先级高于行内样式,依次来覆盖JS自动设置的高度,清除浮动后,有实际高度撑开外部div,并兼容IE兼容模式浏览器。

注意:本身最好不要用JS来自动设置容器高度,兼容性容易出问题。

!important一般也尽量不用,后期不方便维护。

不要用display:table;不兼容IE6,7。

16.IE8及以下版本浏览器无法解析背景图

原样式:background: url("img/again.png")no-repeat;

修改后:background: url("img/again.png") no-repeat;

IE8及以下版本浏览器不识别右括号)与后面内容之间的空格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: