分享

CSS的解决IE5/IE5.5/IE6/FF/IE7的兼容性问题(2)

 昵称5323568 2010-12-30
css部分:

IE6 IE7 IE8 Firefox Chrome Safari
!important Y Y  
_ Y  
* Y Y  
*+ Y  
\9 Y Y Y  
\0 Y  
nth-of-type(1) Y Y

示例代码:

#test{
color:red; /* 所有浏览器都支持 */
color:red !important;/* Firefox、IE7支持 */
_color:red; /* IE6支持 */
*color:red; /* IE6、IE7支持 */
*+color:red; /* IE7支持 */
color:red\9; /* IE6、IE7、IE8支持 */
color:red\0; /* IE8支持 */
}

body:nth-of-type(1) p{color:red;} /* Chrome、Safari支持 */

1、CSS透明
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)
FF:opacity:0.6

2、cursor:hand VS cursor:pointer
FF不支持hand,但ie支持pointer
解决方法: 统一使用pointer

3、padding 问题
padding 5px 4px 3px 1px FireFox无法解释简写,
必须改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;

4、消除ul/ol等列表的缩进时
样式应写成:list-style:none;margin:0px;padding:0px;
其中margin属性对IE有效,padding属性对FireFox有效

5、CSS圆角
IE:不支持圆角
FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-

radius-bottomleft:4px;-moz-border-radius- bottomright:4px;

6、CSS双线凹凸边框
IE:border:2px outset;

FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;

-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080;

7、table边框

.ctb {

border-top: 1px solid #3E4093;

border-left: 1px solid #3E4093;

border-right: 0px;

border-bottom: 0px;

}

.ctb td{

border-top: 1px solid #F4F4FF;

border-left: 1px solid #F4F4FF;

border-right: 1px solid #3E4093;

border-bottom: 1px solid #3E4093;

}

-------------------------------------------------------------------------------------------------------------------------------------------

js部分:

1、window.event

function gotoSubmit(e) {
  e = e? e : (window.event ? window.event : null);  
}

2、IE:interText ;FF:interHTML或者textContent

3、获取鼠标位置:

在IE 中,event 对象有 x, y 属性,FF中没有。

在FF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
解决方法:mX = event.clientX ? event.clientX : event.pageX;


4、event.srcElement问题
说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有 srcElement属性.
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox

下的event.target.

或者

  if(document.all)
  {
  obj = event.srcElement ;
  }
  else
  {
  obj = arguments[0].target;
  }

5、window.location.href问题
说明:IE或者Firefox2.0.x下,可以使用window.location或 window.location.href;Firefox1.5.x下,只能使用window.location.
解决方法:使用window.location来代替window.location.href.

6、模态和非模态窗口问题
说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能.
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口
如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如:var parWin = window.opener;

parWin.document.getElementById("Aqing").value = "Aqing";

7、FF中类似 obj.style.height = imgObj.height 的语句无效
解决方法:
obj.style.height = imgObj.height + 'px';

8、捕获事件

if (document.all)
  window.document.attachEvent("onclick",gorush);
else
  window.document.addEventListener("click",gorush,false) 

9、判断浏览器类型:
var isIE=document.all? true:false;

10、

如果在frame标签中书写了以下属性:
<frame src="/xx.htm" id="frameId" name="frameName" />
那么ie可以通过id或者name访问这个frame对应的window对象
而FF只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
IE: window.top.frameId或者window.top.frameName来访问这个window对象
FF: 只能这样window.top.frameName来访问这个window对象
另外,在FF和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容

11、父结点的问题
在FF中没有 parentElement parentElement.children 而用 parentNode parentNode.childNodes
childNodes的下标的含义在IE和FF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。当html中节点缺失时,IE和FF对parentNode的解释不同,例如
<form>
<table>
  <input/>
</table>
</form>
FF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
FF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

12、自定义属性问题
说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;FF下,只能使用

getAttribute()获取自定义属性.
解决方法:统一通过getAttribute()获取自定义属性.

13、事件委托方法
IE:document.body.onload = inject; //Function inject()在这之前已被实现
FF:document.body.onload = inject();
如果要加传递参数,可以做个闭包
(function(arg){

  document.body.onload=function(){inject(arg);};

})(arg)

14、css"float"属性

IE:document.getElementById("header").style.styleFloat = "left";

FF:document.getElementById("header").style.cssFloat = "left";

15、获取label标签“for”属性

IE:

var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("htmlFor");

FF:

var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("for");

对于 setAtrribute 方法来说也是同样的语法。

16、获取视窗或浏览器窗口的尺寸

IE :

var myBrowserSize = [0, 0];
myBrowserSize[0] = document.documentElement.clientWidth;
myBrowserSize[1] = document.documentElement.clientHeight;

FF:

var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;

17、设置滤镜:

IE:

var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";

FF:

var myObject = document.getElementById("myElement");
myObject.style.opacity = "0.5";

18、.在取得网页窗口区域和获取滚动条位移距离时也要用document.documentElement
即这四个属性(clientWidth、 clientHeight、scrollLeft、scrollTop)一定要用document.documentElement
但是 document.body.appendChild()和document.body.removeChild()却是可以用的,而且用 document.documentElement.appendChild()和 document.documentElement.removeChild()代替却会报错;


总结了一下仅 clientWidth、clientHeight、scrollLeft、scrollTop和 document.documentElement.style时才用document.documentElement

19、body问题
Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在.

例如:
FF:
<body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
}
</script>
</body>


IE&Firefox:
<body>
</body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
} </script>

20、幻灯片效果

if(document.all){

filters[0].Apply();

document.getElementById(imageid).src=path;//更换图片

filters[0].play();

}

else{

firfoxPlays(path,imageid)

}

var intTimeStep=20;

var intAlphaStep=0.04;

var curSObj=null;

var curOpacity=null;

function firfoxPlays(path,imageid) {

  curSObj=document.getElementById(imageid);

  curSObj.style.opacity=0;

  curSObj.src=path;

  curOpacity=0;

  setObjOpen();

}

function setObjOpen() {

  curOpacity+=intAlphaStep;

  curSObj.style.opacity =curOpacity;

  if (curOpacity<1) {

  setTimeout('setObjOpen()',intTimeStep);

  }

}

21、offsetLeft问题

var amount=7;//每次移动7(速度)

if(!document.all) {

var f=document.getElementById(flashDiv);

f.style.left=(f.offsetLeft-amount )+'px';

}

else{

document.getElementById(flashDiv).style.pixelLeft -= amount;

}

22、判断浏览器

if (navigator.userAgent.indexOf("Firefox") > -1)

其他同理

23、document.documentElement.scrollTop

在safari和chrome下为 document.documentElement.scrollTop+document.body.scrollTop

24、//聚焦控件后把光标放到最后
function getSelectPos(obj)
{

var esrc = document.getElementById(obj);
if(esrc==null)
{
  if(document.all)
  {
  esrc = event.srcElement ;
  }
  else
  {
  esrc = arguments[0].target;
  }
}
 
 window.setTimeout(function(){esrc.focus();},0);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多