解析IE5/IE5.5/IE6/FF的兼容性问题

开发 前端
IE5/IE5.5/IE6/FF兼容性是比较棘手的问题,本文向大家介绍一下IE5/IE5.5/IE6/FF兼容性问题如何解决,希望本文介绍对你有所帮助。

本文和大家重点讨论一下如何解决IE5/IE5.5/IE6/FF的兼容性问题,在IE6和FF中没问题的页面在IE5和IE5.5中乱成一团,下面看一下具体解决方法。

解决IE5/IE5.5/IE6/FF的兼容性问题——CSS

既然有问题,那就找找解决的方法咯,在网上一搜,相关的文章还是不少的,觉得最直接的方法还是“IE条件注释”,很方便的就能为IE的不同版本写样式。但这样就得为每个版本写一个样式,不利于文件的优化。

◆找了一些相关的CSSHACK后,觉得应该可以把IE5/IE5.5/IE6/FF的HACK写到一起的,经过测试,终于找到了一个不错的方法,下面我们来看看怎么实现:大家都知道用!important声明可以提升指定样式规则的应用优先权,如下面的例子:

  1. E1{background-color:red!important;  
  2. /*提升优先权*/background-color:blue;} 

但这样写在IE中会有个问题,看过我的《关于CSS样式表优先级》和《关于CSS样式表优先级补遗》,你会知道在IE6和FF中用!important声明可以提高优先级别,但在IE6中的!important声明并不是绝对的,它会被之后的同名属性定义所替换。也就是说在上面的例子中,IE6所应用的是最后一个背景色的值,即“blue”;而在FF中背景色的值为“red”。根据这一点,我们就可以把FF和IE的样式分离开。

OK,解决了FF和IE的问题,现在来解决IE自己的问题。

看过了嘟嘟的《绕过IE6支持IE5的别一种写法-IE也支持">"》后有感而发,使用“>”IE是否真的可以认得?我们来看个例子:

  1.  
  2. E1{background-color:red;  
  3.  
  4. >background-color:blue;  
  5.  
  6. }  

◆在FF中得到的是背景色红色,而在IE中得到的背景色是蓝色,根据样式重定义的规则,如果浏览器可以识别“>”,则应该得到的蓝色的背景,因此可以知道“>”只有IE可以识别,这点是很重要的哦!在后面大家就会知道了。(注:我测试过其它的一些符号,如“~”、“`”、“<”等,都只有IE可以识别,在此为了感谢嘟嘟,推荐使用“>”)

我们再来看个例子:

  1.  
  2. E1{  
  3.  
  4. >/*IEonly*/background-color:black;  
  5. >/*IEonly*/background-color/*IE5.5*/:green;  
  6.  
  7. }  

这个例子在IE6中得到了黑色的背景;而在IE5.5中得到的绿色的背景;在IE5中也得到了黑色的背景。这就说明了第二句定义只有IE5.5能识别,这是个很早就公布的HACK,可以在网上找到相关的资料,要注意的就是在属性名之后是有一个空格的。到此我们已经把FF、IE5.5、IE6分离出来了,那IE5呢?其实现在我们只要把IE5跟IE6分开就OK了,来看看例子:

  1.  
  2. E1{  
  3.  
  4. >/*IEonly*/background-color:red;/*IE5*/  
  5.  
  6. }E1/*IE5.5+*/{  
  7.  
  8. >/*IEonly*/background-color:black;  
  9.  
  10. }  

这里我们又用到一个HACK,就是“E1/**/{}”,这个定义在IE5以上的版本才能识别出来。这个例子得到的结果是,在IE5中的背景色为红色;在IE5以上版本中得到的是黑色背景。

◆终于把不同版本的浏览器都分离出来了,这样我们就可以为不同的浏览器定义不同的样式了。来看个完整的例子:

  1. E1{width:500px;height:50px;  
  2. background-color:red!important;  
  3. /*FF*/background-color:blue;/*IE5*/text-align:center;  
  4. }E1/*IE5.5+*/{  
  5.  
  6. >/*IEonly*/background-color:black;/*IE6*/  
  7. >/*IEonly*/background-color/*IE5.5*/:green;  
  8.  
  9. }  

需要注意的是,在上面例子中“background-color”定义的顺利不能改变,即FF-IE5-IE6-IE5.5.对于IE的定义在属性前要加“>”,因为“E1/**/{}”这个HACK在FF中可以识别。也许你会想,上面的例子不是可以写成:

  1. E1{width:500px;height:50px;background-color:red;/*FF*/  
  2.  
  3. >background-color:blue;/*IE5*/  
  4.  
  5. text-align:center;}E1/*IE5.5+*/{  
  6.  
  7. >/*IEonly*/background-color:black;/*IE6*/  
  8. >/*IEonly*/background-color/*IE5.5*/:green;  
  9.  
  10. }  

这样不就又可以省下几个字节?是没错,可是HACK不是标准,如果滥用HACK,那只会离标准越来越远!

【编辑推荐】

  1. IE6 IE7 IE8浏览器的兼容性PK
  2. 学习笔记 IE8兼容代码用法解析
  3. IE6 IE7 IE8 FF浏览器的CSS兼容问题探究
  4. 微软发布升级版IE8Beta2浏览器 新特性敬请关注
  5. 技术前沿 DIV+CSS布局网页对网站SEO的影响

 

责任编辑:佚名 来源: chinaitlab.com
相关推荐

2010-08-17 16:50:30

JSIE6IE8

2010-09-15 11:32:37

IE6IE7浏览器兼容性

2010-08-18 14:14:41

IE6IE7FF

2010-08-18 09:24:09

IE6兼容性

2010-08-19 16:06:15

2010-08-17 16:18:23

IE6IE7FF

2010-08-18 09:14:58

IE6兼容性

2011-06-03 15:41:27

CSS HACK

2010-08-17 16:27:52

IE6IE7IE8

2010-08-19 10:13:25

marginFFIE6

2010-10-09 15:22:25

IE7.JS

2010-09-15 10:14:19

IE7IE8兼容CSS

2010-09-16 13:33:47

IE6IE7IE8

2010-08-20 09:25:11

IE6IE7IE8

2010-08-17 15:07:48

IE6IE7IE8

2010-09-15 10:57:25

IE6IE7FF

2010-08-30 09:35:35

IE6IE7Firefox

2010-09-15 11:08:48

CSSIE6IE7

2010-09-15 11:18:27

IE6IE7火狐

2010-08-20 13:15:54

IE6IE7IE8
点赞
收藏

51CTO技术栈公众号