首页 > 代码库 > CSS Hack

CSS Hack

一、css hack定义
 
由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。 这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。
这个针对不同的浏览器写不同的CSS code的过程,就叫CSS hack!
 
二、css hack原理及分类
 
由于不同的浏览器对CSS的支持及解析结果不一样,外加CSS中的优先级的关系,我们就可以根据这个来针对不同的浏览器来写不同的CSS。
 
1、CSS Hack大致有3种表现形式:
(1)类内部Hack:比如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",而firefox两个都不能认识,等。
(2)选择器Hack:比如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{},等。
(3)HTML头部引用(if IE)Hack:针对所有IE:<!--[if IE]><!--您的代码--><![endif]-->,针对IE6及以下版本:<!--[if lt IE 7]><!--您的代码--><![endif]-->,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
 
书写顺序:一般是将识别能力强的浏览器的CSS写在前面。
 
三、css hack写法总结
IE hack
  所有的ie浏览器都可识别\9
IE6 hack
_    只有ie6能识别_
IE7 hack
   只有ie6、ie7可以识别*
IE8 hack
 只有ie8、ie9可以识别\0
IE9 hack
 只有ie8、ie9可以识别\9\0
所以的浏览器都支持
 
 
在这里要解释一下,看到网上有关于ie6不支持!important,也有关于ie7不支持!important的说法,经过反复试验,感觉这样说都是不妥当的,应该说所有的浏览器都支持!important,关键是要写对顺序,详见CSS:!important,
一些CSS Hack由于浏览器存在交叉认识,所以需要通过层层覆盖的方式来实现对不同浏览器进行Hack的,所有书写顺序很重要。
最后举个例子来说明:
div{color:red; color:green\9;*color:blue;_color:yellow}
结果是:谷歌和火狐下是红色;ie8和ie9下是绿色;ie7下是蓝色;ie6下是黄色
     

CSS Hack