CSS hack

什么是CSS Hack?简单地讲:这个针对不同的浏览器写不同的CSS code的过程,就叫CSS Hack!通俗地讲:CSS Hack指各版本及各品牌浏览器之间对CSS解释后出现网页内容的兼容bug误差(比如我们常说错位)的处理。 由于各浏览器的内核不同,所以会造成一些误差就像JS一样,一个JS网页特效,在微软IE6、IE7、IE8浏览器有效果,但可能在火狐(Mozilla Firefox)谷歌浏览器无效,这样就叫做JS Hack ,所以我们对于CSS来说他们来解决各浏览器对CSS解释不同所采取的区别不同浏览器制作不同的CSS样式的设置来解决这些问题就叫作CSS Hack。

 

CSS Hack的原理是什么?

 

由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。
CSS Hack大致有3种表现形式,CSS类内部Hack、选择器Hack以及HTML头部引用(if IE)Hack,CSS Hack主要针对IE浏览器。
类内部Hack:比如 IE6能识别下划线"_"和星号" * ",IE7能识别星号" * ",但不能识别下划线"_",而firefox两个都不能认识。等等
选择器Hack:比如 IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。等等
HTML头部引用(if IE)Hack:针对所有IE:<!--[if IE]><!--您的代码--><![endif]-->,针对IE6及以下版本:<!--[if lt IE 7]><!--您的代码--><![endif]-->,这类Hack不仅对CSS生效,对写在判断语句里面的所有代码都会生效。
书写顺序,一般是将识别能力强的浏览器的CSS写在前面。下面如何写里面说得更详细些。

 

总结以下HACK书写方法:

 

  浏览器:仅限IE6+,FF,Safari,Chrome,Opera;(截止到2011.10.12非IE均为最新版本)。
  测试环境:windows系统;(FF : firefox; OP : opera; SA : safari; CH : chrome;  Y代表支持,N代表不支持。)

标志符示例IE6IE7IE8IE9FFOPSACH
*.eq {*color:#000;}YYNNNNNN
_.eq {_color:#000;}YNNNNNNN
+.eq {+color:#000;}YYNNNNNN
-.eq {-color:#000;}YNNNNNNN
>.eq {>color:#000;}YYNNNNNN
\0.eq {color:#000\0;}NNYYNYNN
\9.eq {color:#000\9;}YYYYNNNN
\9\0.eq {color:#000\0;}NNN\YYNNNN
:root .xx{xxx:xxx\9;}:root .eq {color:#a00\9;}NNNYNNNN
*+.eq {*+color:#000;}YYNNNNNN
*-.eq {*-color:#000;}YNNNNNNN
*html*html .eq {color:#000;}YNNNNNNN
*+html*+html .eq {color:#000;}NYNNNNNN
html*html* .eq {color:#000;}YYNNNNNN
[;.eq {color:red;[;color:blue;}YYNNNNYY
html>bodyhtml>body .eq {color:blue;}NYYYYYYY
html>/**/bodyhtml>/**/body .eq {color:blue;}NNYYYYYY
html/**/>bodyhtml/**/>body .eq {color:blue;}NYYYYYYY
@media all and (min-width:0px){}@media all and (min-width:0px){.eq {color:#000;}}NNNYYYYY
*:first-child+html*:first-child+html .eq {color:blue;}NYNNNNNN
*:first-child+html{} *html*:first-child+html{} *html .eq {color:blue;}YNNNNNNN
@-moz-document url-prefix(){}@-moz-document url-prefix(){ .eq {color:blue;}}NNNNYNNN
@media screen and (-webkit-min-device-pixel-ratio:0){}@media screen and (-webkit-min-device-pixel-ratio:0){.eq {color:blue;}}NNNNNNYY
@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){}@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){.eq {color:blue;}}NNNNNYNN
body:nth-of-type(1)body:nth-of-type(1) .eq {color:blue;}NNNYYYYY

 

注意事项:

1、由于各浏览器更新神速,所以有些HACK可能会有变化,所以请大家注意。
2、[;此种方式会影响后续样式,不可取。
3、\9\0并非对所有属性都能区分IE8和IE9。比如:background-color可以,但background不可以,还有border也不可以。所以在实际用时要测试下。
4、当同时出现\0,*,_,时,推荐将\0写在*和_前面。例如:color:red\0;*color:blue;_color:green;可行,否则IE7和IE6里的效果会失效。但border例外,放在前后都可以。保险起见,还是放在前面。

 

书写方法一:

 

IE6 hack
  _background-color:#CDCDCD; /* ie 6*/
IE7 hack
  *background-color:#dddd00; /* ie 7*/
IE8 hack
  background-color:red \0; /* ie 8/9*/
IE9 hack
  background-color:blue \9\0;
火狐,遨游,及其它高级浏览器通用
  background-color:red!important;
  注意写hack的顺序,其中:
  background-color:red\0;IE8和IE9都支持;background-color:blue\9\0; 仅IE9支持;
  另外,background-color:#eeeeee\9;的HACK支持IE6-IE8,但是IE8不能识别“*”和“_”的CSS HACK。
可综合上述规律灵活应用。

 

书写方法二:

 

#element {color:orange;}
#element {*color: white; }  /* IE6+7, doesn't work in IE8/9 as IE7 */
#element {_color: red; }  /* IE6 */
#element {color: green\0/IE8+9; }  /* IE8+9  */
:root #element { color:pink \0/IE9; }  /* IE9 */

 

IE9 和 IE8 以及其他版本的区别说明

background-color:blue; 各个浏览器都认识,这里给firefox用;
background-color:red\9;\9所有的ie浏览器可识别;
background-color:yellow\0; \0 是留给ie8的,最新版opera也认识,后面自有hack写了给opera认的,所以,\0我们就认为是给ie8留的;
+background-color:pink; + ie7定了;
_background-color:orange; _专门留给神奇的ie6;
:root #test { background-color:purple\9; } :root是给ie9的,网上流传了个版本是 :root #test { background- color:purple\0;},这个,新版opera也认识,所以经笔者反复验证最终ie9特有的为:root 选择符 {属性\9;}
@media all and (min-width:0px){ #test {background-color:black\0;} } 这个是老是跟ie抢着认\0的神奇的opera,必须加个\0,不然firefox,chrome,safari也都认识。。。
@media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }最后这个是浏览器新贵chrome和safari的。

 

需要我们注意的浏览器:自带内核的有IE6、IE7、IE8、IE9谷歌浏览器(Chrome)、火狐(Mozilla Firefox)苹果浏览器(Safari)即可,至于我们常用的360安全浏览器、搜狗高速浏览器、天天浏览器、腾讯TT、傲游浏览器、百度浏览器、腾讯QQ浏览器等是无内核的,用的是计算机中装的系统自带浏览器的内核,所以只需要兼容自带内核浏览器即可兼容。

posted on 2013-06-04 14:55 天使半只翼 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/william-lin/archive/2013/06/04/3117100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值