博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

不同浏览器之间的javascript和css兼容性问题

Posted on 2014-03-26 17:18  fourier的天空  阅读(263)  评论(0编辑  收藏  举报

po主手头维护的网站是上世纪的作品。当时约摸ie所占的市场份额相当大,以至于开发人员都没有考虑到浏览器兼容性问题(这不科学!)。怎奈po主是个强迫症阿。最近在修改的时候,还是没忍住,把兼容性问题解决了。一旦开始改bug,根本停不下来!

主要问题有2个:

1、浮动图标问题。低版本ie下可以实现浮动效果,firefox/高版本ie下无。察看javascript代码,原理上是用javascript对于position:absolute的div,每过固定时间(毫秒级)设置其top和left。语句如下:

img1.style.left = (xPos + document.body.scrollLeft);
img1.style.top = (yPos + document.body.scrollTop);

 唔唔,不兼容的原因在于:firefox/高版本ie对于left的值只认像素值。修改成 img1.style.left=****+"px"; 即可。

2、下拉菜单问题。这段代码后来在查疑的时候搜了下,貌似是网上抄过来略作修改的,主要由css达成。其中一些css的名称阿,多余的css阿都保留着。问题在于css生成的下拉菜单无法对齐到指定位置。核心代码如下:

#nav LI A {
    COLOR: #fff;
}

#nav LI UL {
    Z-INDEX: 9999; BORDER-BOTTOM: #0751b0 1px solid; POSITION: absolute; TEXT-ALIGN: left; BORDER-LEFT: #0751b0 1px solid; LINE-HEIGHT: 23px; MARGIN-TOP: 26px; WIDTH: 104px; BACKGROUND: white; MARGIN-LEFT: -90px; BORDER-TOP: #0751b0 0px solid; BORDER-RIGHT: #0751b0 1px solid; LEFT: -999em; _margin-top: 26px; _margin-left: -90px
}

原理上是在mouseover的时候,把nav LI UL(下拉菜单)的left改成auto。nav LI是nav LI UL前面的区块,该2区块需要上下对齐,方法是调整MARGIN-TOP和MARGIN-LEFT。你看到啦,里面很多干扰属性。以至于我查了2个小时。。。主要是该ul的初始位置在低版本ie和firefox/高版本ie中不一样。解决的方法是:nav LI区块中所包含的有且仅有链接a,因此设置nav LI A,增加display:block。这样就可以保证初始位置一致了。(有显示,并且在left:auto这种文字流对齐的方式下,不同浏览器保持一致的占位情况。)