虽然CSS hack技术有风险,不推荐使用,但仍是有必要了解一下。html
1、什么是CSS hack?web
个人理解就是针对不一样浏览器/不一样版本,写相应CSS代码,这一过程叫作CSS hack。chrome
2、CSS hack原理浏览器
因为不一样浏览器/不一样版本,对CSS的理解会有差别,以及CSS优先级的关系,咱们能够据此针对不一样的浏览器/版本写不一样的CSS。spa
3、CSS hack分类firefox
CSS hack主要可分为:选择器hack,CSS属性hack和IE条件hack。code
一、选择器hackhtm
选择器hack就是在选择器前加上一些只有特定浏览器才能识别的前缀进行hack。blog
比较经常使用的有如下几种:it
二、CSS属性hack
CSS属性hack就是在CSS属性名前加上一此只有特定浏览器才能识别的前缀进行hack。
下面是IE浏览器CSS hack对照表:
hack | 写法 | IE6(S) | IE6(Q) | IE7(S) | IE7(Q) | IE8(S) | IE8(Q) | IE9(S) | IE9(Q) | IE10(S) | IE10(Q) |
* | *color | Y | Y | Y | Y | N | N | N | N | N | N |
+ | +color | Y | Y | Y | Y | N | Y | N | Y | N | Y |
- | -color | Y | Y | N | N | N | N | N | N | N | N |
_ | _color | Y | Y | N | Y | N | Y | N | Y | N | N |
# | #color | Y | Y | Y | Y | N | Y | N | Y | N | Y |
\0 | color:red\0 | N | N | N | N | Y | N | Y | N | Y | N |
\9\0 | color:red\9\0 | N | N | N | N | N | N | Y | N | Y | N |
important | color:red !important | N | N | Y | N | Y | N | Y | N | Y | Y |
在标准模式中:
"-"减号是IE6特有的
“\9”是IE6~IE10都有效
"\0"是IE8~IE10的hack(最新opera也识别)
"\9\0"是IE9/E10的hack
因为浏览器对一些CSS hack存在交叉认识,因此须要经过覆盖的方式来实现对不一样浏览器的hack。以下例子:
#test {
color:blue; /*firefox*/ color:red\9; /*all ie*/ color:yellow\0; /*ie8*/ *color:pink; /*ie7*/ _color:orange; /*ie6*/ } :root #test { color:purple\9; } /*ie9*/ @media all and (min-width:0px){ #test {color:black\0;} } /*opera 若是不加\0,firefox,chrome,safari也都认识*/ @media screen and (-webkit-min-device-pixel-ratio:0){ #test {color:gray;} } /*chrome and safari*/
三、IE条件hack
这种方式是IE浏览器专有的hack,也是微软官方推荐的hack方式:lt小于,gt大于,lte小于等于,gte大于等于,!非。
针对全部IE:<!--[if IE]>针对全部IE<![endif] -->
只针对IE6:<!--[if IE 6]>只针对IE6<![endif]-->
针对IE7及如下版本:<!--[if lte IE 7>针对IE7及如下版本<![endif]-->
针对IE8以上版本:<!--[if gt IE 8>针对IE8以上版本<![endif]-->
针对非IE:<!--[if !IE]>针对非IE<![endif] -->