欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浏览器兼容问题之我见

程序员文章站 2023-12-31 13:16:04
...

浏览器兼容问题之总结

  1. 不同浏览器的标签默认外补丁margin和内补丁padding不同

发生概率:100%

解决方案:使用CSS通配符*,设置内外补丁为0

*{ margin: 0; padding: 0;}

  1. 块属性标签float之后,又有横向的margin值,在IE6中显示会比设置的大(IE6双边距bug)

发生概率:90%

解决方案:在float标签样式控制中加入display:inline;

  1. 设置较小的高度标签(一般小于10px),在IE6,IE7,遨游中超出自己设置的高度

发生概率:60%

解决方案:给超出高度的标签设置overflow:hidden;或者设置行高line-height小于你设置的高度。

  1. 行内标签设置display:block;后又采用float布局,再设置横向margin值时,在IE6中显示会比设置的大(IE6双边距bug)

发生概率:20%

解决方案:在display:block;后面加上display:inline;display:table;

  1. 图片默认有间距

发生概率:20%

解决方案:使用float为img布局

  1. 标签最低高度设置min-height不兼容

发生概率:5%

解决方案:例如要设置一个标签的最小高度为200px

{ min-height: 200px;

height: auto!important;

height: 200px;

overflow: visible;}

  1. 透明度兼容设置

发生概率:主要看你要写的东西设不设透明度

解决方案:

transparent_class {   
    filter:alpha(opacity=50);   
       -moz-opacity:0.5;   
       -khtml-opacity: 0.5;   
       opacity: 0.5;   
 } 
  1. Box Model的bug

描述:给一个元素设置了高度和宽度的同时,还为其设置margin和padding的值,会改变该元素的实际大小。

解决办法:在需要加 margin和padding的div内部加一个div,在这个div里设置margin和padding值。

  1. IE6中的列表li楼梯状bug

描述:通常在li中的元素(比如a)设置了浮动float,但li本身不浮动。

解决办法:

ul li{float:left;}

或 ul li{display:inline;}

10.li空白间距

描述:在IE下,会增加li和li之间的垂直间距

解决办法:给li里的a显式的添加宽度或者高度

li a{width:20px;}

或者

li a{display:block;float:left;clear:left;}

或者

li {display:inline;}

li a{display:block;}

或者

在每个列表li上设置一个实线的底边,颜色和li的背景色相同

11.overflow:auto;和position:relative的碰撞

描述:此bug只出现在IE6和IE7中,有两个块级元素,父元素设置了overflow:auto;子元素设置了position:relative;且高度大于父元素,在IE6-7中子元素不会被隐藏而是溢出。

解决方案:给父元素也设置position:relative;

12.浮动层的错位

描述:当内容超出外包容器定义的宽度时会导致浮动层错位问题。在Firefox、IE7、IE8及其他标准浏览器里,超出的内容仅仅只是超出边缘;但在IE6中容器会忽视定义的width值,宽度会错误地随内容宽度增长而增长。如果在这个浮动元素之后还跟着一个浮动元素,那么就会导致错位问题。

解决方案:overflow:hidden;

13.IE6克隆文本的bug

描述:若你的代码结构如下

<!--这是注释-->

    <div>
  		……
   </div>

<!--这是注释-->

很有可能在IE6网页上出现一段空白文本

解决方案:

使用条件注释

删除所有注释

在注释前面的那个浮动元素加上 display:inline;

14.IE的图片缩放

描述:图片在IE下缩放有时会影响其质量

解决方案:img{ -mg-interpolation-mode:bicubic;}

15.IE6下png图片的透明bug

描述:使用透明图片,使用png24或png32图片在IE6下面显示图片会有一层淡蓝色的背景。

解决方案:


.img{
background:url('http://shenmo.wanmei.com/images/logo/sm_logo_202x104.png');
_background:0;
_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://shenmo.wanmei.com/images/logo/sm_logo_202x104.png',sizingMethod='scale');}
img{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://shenmo.wanmei.com/images/logo/sm_logo_202x104.png',sizingMethod='scale');}
或
<imgsrc="test.png" width="247" height="216" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='http://shenmo.wanmei.com/images/logo/sm_logo_202x104.png',sizingMethod='scale');" alt="" />

  1. iframe 透明背景bug
    描述:在IE浏览器中,iframe框架不会自动把背景设为透明
    解决方法:
 <iframesrc="content.html"allowTransparency="true"></iframe>

   在iframe调用的content.html页面中设置

   body{background-color: transparent;}
  1. 禁用IE默认的垂直滚动条:
    解决方法: html{ overflow:auto;}

  2. 浏览器的内核分别是什么?经常遇到的浏览器的兼容性有哪些?原因,解决 方法是什么,常用 hack 的技巧 ?

* IE 浏览器的内核 Trident、Mozilla 的 Gecko、 google 的 WebKit、 Opera 内核 Presto;
* png24 为的图片在 iE6 浏览器上出现背景,解决方案是做成 PNG8.
* 浏 览 器 默 认 的 margin 和 padding 不 同 。 解 决 方 案 是 加 一 个 全 局 的
*{margin:0;padding:0;}来统一。
* IE6 双边距 bug:块属性标签 float 后,又有横行的 margin 情况下,在 ie6 显示 margin
比设置的大。
浮动 ie 产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}
这种情况之下 IE 会产生 20px 的距离,解决方案是在 float 的标签样式控制中加入 —
—_display:inline;将其转化为行内属性。(_这个符号只有 ie6 会识别)
渐进识别的方式,从总体中逐渐排除局部。
首先,巧妙的使用“\9”这一标记,将 IE 游览器从所有情况中分离出来。
接着,再次使用“+”将 IE8 和 IE7、IE6 分离开来,这样 IE8 已经独立识别。
css
.bb{
background-color:#f1ee18;/*所有识别*/
.background-color:#00deff\9; /*IE6、7、8 识别*/
+background-color:#a200ff;/*IE6、7 识别*/
_background-color:#1e0bd1;/*IE6 识别*/
}
* IE 下,可以使用获取常规属性的方法来获取自定义属性,
也可以使用 getAttribute()获取自定义属性;
Firefox 下,只能使用 getAttribute()获取自定义属性.
解决方法:统一通过 getAttribute()获取自定义属性.
* IE 下,even 对象有 x,y 属性,但是没有 pageX,pageY 属性;
Firefox 下,event 对象有 pageX,pageY 属性,但是没有 x,y 属性.
* (条件注释)缺点是在 IE 浏览器下可能会增加额外的 HTTP 请求数。
* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入
CSS 属性 -webkit-text-size-adjust: none; 解决.
超链接访问过后 hover 样式就不出现了 被点击访问过的超链接样式不在具有 hover 和
active 了解决方法是改变 CSS 属性的排列顺序:
L-V-H-A : a:link {} a:visited {} a:hover {} a:active {}
  1. js中的浏览器兼容:

(1)在获取DOM节点时高版本浏览器和低版本浏览器之间存在兼容问题;在高版本的浏览器中只是获取节点,会忽略文本内容,而在低版本的浏览器中在获取节点时会包含文本节点;

(2)事件对象:在IE浏览器中事件对象是window对象的一个属性event,并事件对象只能在事件发生时被访问,所有事件处理完后,该对象就消失了。在标准的DOM中规定事件处理函数的第一个参数为事件对象;

(3)在IE中,事件的对象包含在event的srcElement属性中,在标准的DOM浏览器中,对象包含在target属性中

(4)在IE中取消事件传递(阻止冒泡)的方法为:window.event.cancelBubble=true;在非IE中取消事件传递(停止捕捉)的方法为stopPropagation();

(5)获取style CSS内联样式属性值

//var w = window.getComputedStyle(box,null).width; //标准
//var h = box.currentStyle[“height”]; //IE8及以下的处理方式
function getStyle(dom,propertyName){
if(dom.currentStyle){
return dom.currentStyle[propertyName];
}else{
return getComputedStyle(dom,null)[propertyName];
}
}

(6)事件监听

标准: addElementListener(“click”,function(){},false);
IE:attachEvent(“onclick”,function(){});
function addEvent(dom,type,fn){
if(dom.addEventListener){
dom.addEventListener(type,fn);
}else{
dom.attachEvent(“on” + type,fn);
}
 }
相关标签: 浏览器的兼容性

上一篇:

下一篇: