博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调浏览器兼容时遇到的问题
阅读量:7183 次
发布时间:2019-06-29

本文共 3073 字,大约阅读时间需要 10 分钟。

hot3.png

     毕设马上就要搞完了,因为之前开发是在chrome里面的, 现在需要兼容IE6及其以上,从周五开始就在调兼容,昨天晚上终于基本上没什么问题了,现在就记录一下之前遇到的问题。

      1.  IE的z-index问题

          在webkit中,使用absolute定位的元素,只要设置z-index就可以完全控制层叠顺序,比如A的z-index为500,B的z-index为499,那么A就在B的上面,但是IE不一样,IE需要有一个强大的“爹”,也就是postion:relative的元素,它会去看最上层的relative的z-index是多少,所以经验告诉我们,拼爹还是有道理的。 

      2.  IE6 PNG图片背景问题

          IE6下面PNG图片透明不支持,所以需要使用fixPNG.js让它支持IE6:

    3. IE6不支持position:fixed的问题

      我做了一个类似天猫下面的东西:

      当滚轮滚动的时候,如果这一部分的内容不在可视范围了,就让它固定在可视范围的最上边。

      由于个人感觉fixed这个功能不是核心,所以做了一个判定,如果IE6,就不fixed。

      判定是否是IE6:

 

typeof document.body.style.maxHeight === "undefined";
       当然,晚上有各种资料说怎么让IE6支持fixed,这里暂时不搞这个。

      4. float的元素margin双倍问题

         设置display:inline来解决。

      5. IE6不支持如li:hover这种伪类

         在一个列表中,有时候需要鼠标一上去之后为这个元素加一个边框什么的效果,IE7及其以上,webkit的都没有问题,IE6不支持,第一想法,使用JS做这个效果,后面一想,算了,这样麻烦多了,果断网上找了一个csshover.htc文件,代码如下:

 

     6. IE6 location.href无法跳转的问题

        我设置了一个<a href = "javascript:;">xxx</a>,然后在JS中判定click,如果条件成立,则跳转,但是IE6下面无法跳转,网上查了一下,原因如下:

      在IE各个版本和Firefox中,都是先执行click事件,再执行href,也就是说click的优先级优于href;

      在firefox中,如果click中有可用的location.href,那么直接跳转,不再执行a中的href,如果没有location.href,那么执行href;

      如果在click的时候使用return false是可以阻断href的执行的;

      IE中如果a的target= "__self",那么最后进入的是href中的有效URL;

     当href为锚或空,则IE和firefox都不会把它当成有效URL处理,但是当href="javascript:void(0)"或javascript:;,IE6会把它当成有效URL处理,IE6以上以及firefox不会。

     所以改成<a href = "#">xxx</a> ,解决问题。

    7. change事件无法冒泡

       网上查了一下,鼠标键盘事件是可以冒泡的,这种接口型事件不能冒泡,如blur,focus,change等等。

       PS:在我的chrome下面change是可以冒泡的。

       当然,普通的做法冒不冒泡也没什么关系,反正就是一个元素注册一个事件监听器,但由于我这儿是一个列表,列表中每行有一个input,如果使用这种,监听器就太多了,所以就使用事件代理来处理它。

      首先,change事件是可以通过blur和focus模拟的,所以基本上的难点就出在了blur和focus上面。

     那么怎么让blur和focus能使用代理呢,首先非IE的浏览器,支持事件捕获,那么完全可以使用事件捕获来搞定这个事情,而IE中又存在focusin和focusout,这两个事件IE中能冒泡,所以这个事情就好办了嘛,判定是否是IE就行了,直接上代码吧:

(function() {	var _specialTypes = {		focus : tp.browser.isIe ? "focusin" : "focus",		blur : tp.browser.isIe ? "focusout" : "blur"	};	tp.event.proxy = function(element,type,fn) {		var _callback = function(e) {			var target = tp.event.getTarget(e);		       fn.call(this,target,e,target.tagName.toLowerCase());	       };		if(type in _specialTypes) {			type = _specialTypes[type];		}		_addEventListener(element,type,_callback,true);		return {			remove : function() {				_removeEventListener(element,type,_callback,true);			}		};	};})();
  8. IE下使用width:100%失效的问题

      在很多地方,我都喜欢使用width:100%,但在IE7和IE6中出现了一些地方使用width:100%之后,宽度很窄,整个文字变得特别怪异,没去追究深层次的原因,直接width:xxxpx就好了。

 9. 图片垂直居中的问题

     之前让图片垂直居中的办法,如下:

 

.itemWrapper .itemImg {	height:360px;	width:240px;	overflow:hidden;	display: table-cell;	vertical-align:middle;	/*设置水平居中*/	text-align:center;	/* 针对IE的Hack*/ 	*display: block;	*font-size:210px;/*约为高度的0.873,240*0.873 约为209.52*/	*font-family:Arial;/*防止非utf-8引起的hack失效问题,如gbk编码*/}.itemWrapper .itemImg img {	vertical-align:middle;}

  可是在IE6下面有问题,所以修改了方案,变成了:

.verticalCenterWrapper {	margin:0 auto;	display:table;	*position:relative;}.verticalCenterBox {	display:table-cell;vertical-align:middle;	*position:absolute;*top:50%;}.verticalCenterCnt {	*position:relative;	*top:-50%;}
  使用如下:

 基本上遇到的兼容性问题就这些,其实主要是前期写这些的时候要注意一下,比如CSS里面尽量使用兼容性比较好的代码,hack这种东西,不到万不得已,还是不用它吧。

转载于:https://my.oschina.net/mingtingling/blog/122665

你可能感兴趣的文章
登录验证过滤器
查看>>
用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数
查看>>
C Python类型互换
查看>>
Chapter 2 Open Book——9
查看>>
如何在Nginx下配置PHP程序环境
查看>>
iOS:城市级联列表的使用
查看>>
elk安装(这个是初级的可以把这个套件安上)
查看>>
thinkphp验证码(总结之后,效率非常好)
查看>>
网络流量分析——NPMD关注IT运维、识别宕机和运行不佳进行性能优化。智能化分析是关键-主动发现业务运行异常。科来做APT相关的安全分析...
查看>>
.NET接入UnionPay银联支付(一)手机wap支付
查看>>
Java多线程-工具篇-BlockingQueue
查看>>
js中动态创建json,动态为json添加属性、属性值的实例
查看>>
使用Qemu运行Ubuntu文件系统(1)
查看>>
红黑树
查看>>
2018年10月小结(流水账) -- 1024程序员节快乐
查看>>
SpringBoot(八)配置logback日志
查看>>
单点登录 之 OAuth
查看>>
『流畅的Python』第15章:上下文管理器和else块
查看>>
windows环境下面批量新建文件夹
查看>>
MS CRM 2011 如何获得当前用户使用的界面语言
查看>>