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

转自 蓝色理想 
作者 bias
原文地址 http://www.blueidea.com/tech/site/2006/3296.asp 
之前找了几个不同版本的可独立运行的IE浏览器,正好拿来试试页面的兼容性问题。不试不知道,在IE6和FF中没问题的页面在IE5和IE5.5中乱成一团,一直听说IE5是WEB标准制作的一个“钉子户”,现在不得不相信了。

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

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


代码如下:

E1{ 
background-color: red !important;/*提升优先权*/ 
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是否真的可以认得?我们来看个例子: 
------------------------------------------------- 
E1{ 
background-color: red; 
>background-color: blue; 

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

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

我们再来看个例子: 
------------------------------------------------- 
E1{ 
>/*IE only*/background-color: black; 
>/*IE only*/background-color /*IE5.5*/: green; 

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

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

E1/*IE5.5+*/{ 
>/*IE only*/background-color: black; 

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

这里我们又用到一个HACK,就是“E1/**/{}”,这个定义在IE5以上的版本才能识别出来。这个例子得到的结果是,在IE5中的背景色为红色;在IE5以上版本中得到的是黑色背景。 
终于把不同版本的浏览器都分离出来了,这样我们就可以为不同的浏览器定义不同的样式了。来看个完整的例子: 
------------------------------------------------- 
E1{ 
width: 500px; 
height: 50px; 
background-color: red !important;/*FF*/ 
background-color: blue;/*IE5*/ 
text-align:center; 

E1/*IE5.5+*/{ 
>/*IE only*/background-color: black;/*IE6*/ 
>/*IE only*/background-color /*IE5.5*/: green; 

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

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

E1/*IE5.5+*/{ 
>/*IE only*/background-color: black;/*IE6*/ 
>/*IE only*/background-color /*IE5.5*/: green; 
}

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

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

(0)

相关推荐

  • 如何解决hover在ie6中的兼容性问题

    1,在body里添加以下样式: behavior:url(../scripts/csshover.htc); csshover.htc可直接在网上下载 2,js解决 判断是否为ie6 window.onload=function(){ var isIE=!!window.ActiveXobject: var is IE6=isIE&&XMLHttpRequest; if(isIE6){} } 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们

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

    转自 蓝色理想  作者 bias 原文地址 http://www.blueidea.com/tech/site/2006/3296.asp 之前找了几个不同版本的可独立运行的IE浏览器,正好拿来试试页面的兼容性问题.不试不知道,在IE6和FF中没问题的页面在IE5和IE5.5中乱成一团,一直听说IE5是WEB标准制作的一个"钉子户",现在不得不相信了. 既然有问题,那就找找解决的方法咯,在网上一搜,相关的文章还是不少的,觉得最直接的方法还是"IE条件注释",很方便的

  • 解决Keras 与 Tensorflow 版本之间的兼容性问题

    在利用Keras进行实验的时候,后端为Tensorflow,出现了以下问题: 1. 服务器端激活Anaconda环境跑程序时,实验结果很差. 环境:tensorflow 1.4.0,keras 2.1.5 2. 服务器端未激活Anaconda环境跑程序时,实验结果回到正常值. 环境:tensorflow 1.7.0,keras 2.0.8 3. 自己PC端跑相同程序时,实验结果回到正常值. 环境:tensorflow 1.6.0,keras 2.1.5 怀疑实验结果的异常性是由于Keras和Te

  • IE和FireFox(FF)中js和css的不同

    在IE和FireFox(FF)中js和css的不同 css: 1. ul标签中FF中有个padding值,却没有margin值,而在IE中正好相反 解决办法:将ul的padding和margin都设为0(也可以不是0)如:padding:0;margin:0;list-style:none; js: 1. IE中innerText在FF中没有,使用textContent; eg: 复制代码 代码如下: var obj=document.getElementById("_td"); va

  • FF IE兼容性的修改小结

    1.html 标签如果用 $(id) 或者 getElementById 这两个方法取值时,要给该标签加上 id 的属性, IE . FF 才兼容.如 $(mobile): 如果填 写 mobile 的 input 没有 id 属性在 FF 中会报这个变量 undefined : 2. 取 form 表单的某个标签对象,如果要 IE . FF 兼容要把 formMain.item 改为 document.formName.item . 如 form1.webUrl 改为 document.for

  • 解决IE6 3像素Bug的css写法

    只要触发IE的hasLayout,非浮动元素就会拥有布局.所以,利用IE6特有的hack规则,为它单独写样式就可修复此问题: _zoom:1; margin-left: value; _margin-left: value-3px; zoom 是IE触发Layout条件之一,因为它是IE特有的CSS规则,所以采用zoom. margin-left: value-3px 是修复IE6 中3px 的bug. 此前采用非浮动元素也浮动的方法修复bug,现在我们可以试试这个新的方法了! 注:前面的下划线

  • 支持IE6 IE7 Firefox 的纯CSS的下拉菜单

    纯CSS的下拉菜单 支持IE6 IE7 Firefox *{margin:0;padding:0;} .menu{font-size:12px;position:relative;z-index:100;} .menu ul{list-style:none;} .menu li {float:left;position:relative;} .menu ul ul {visibility:hidden;position:absolute;left:3px;top:23px;} .menu tab

  • 支持IE和FF的div+css选项卡

    Tab - 飞飞+PR /*TAB布局*/ #tab * {font-size:12px;} #tab h3 a {display:inline-block;} #tab h3 a {display:block;} #tab {position:relative;} #tab h3,#tab ul,#tab div,#tab li {margin:0;padding:0;list-style-type:none;} #tab ul li {position:absolute;left:0;top

  • ie6下png图片背景不透明的解决办法使用js实现

    我们时常在使用png图片的时候,在ie6下发生背景不透明的问题,下面给大家介绍下一个js解决的方式. 首先我们要用到一个js,代码如下: 复制代码 代码如下: /** * DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>. * Author: Drew Diller * Email: drew.diller@gmail.com * URL: http://www.diller

  • IE6下出现JavaScript未结束的字符串常量错误的解决方法

    里面提到"DOM是UTF-8的篇码,如果JS库不是分离的独立JS文件,而是包含在DOM里的,这个问题是不会出现的.然而分离的JS文件并不是UTF-8编码,被加库到UTF-8编码的DOM里,中文就出现了乱码,并影响到引号符,使浏览器无法判断字符串结束.解决变法很简单,JS文件另存为UTF-8编码格式即可. " 所以我修改了JavaScript的引用, <script type="text/javascript" src="**.js" cha

随机推荐