因为不一样厂商的流览器或某浏览器的不一样版本(如IE,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不同,致使在不一样浏览器的环境中呈现出不一致的页面展示效果。这时,咱们为了得到统一的页面效果,就须要 针对不一样的浏览器或不一样版本写特定的CSS样式。咱们把针对不一样的浏览器/不一样版本写相应的CSS code的过程,叫作CSS hack!html
因为不一样的浏览器和浏览器各版本对CSS的支持及解析结果不同,以及CSS优先级对浏览器展示效果的影响,咱们能够据此针对不一样的浏览器情景来应用不一样的CSS。web
(1)IE6 能识别下划线" _
"和星号" *
"segmentfault
(2)IE7 能识别星号" *
",但不能识别下划线" _
"浏览器
(3)IE6~IE10 都识别" \9
"spa
(4)firefox 前述三个都不能识别。firefox
(1)IE6 能识别 *html .class{}
code
(2)IE7 能识别 *+html .class{}
或 *:first-child+html .class{}
htm
(1)全部 IE (注:IE10+ 已经再也不支持条件注释)能识别 <!--[if IE]>IE浏览器显示的内容 <![endif]-->
blog
(2)IE6及如下版本能识别 <!--[if lt IE 6]>只在IE6-显示的内容 <![endif]-->
这类 Hack 不只对 CSS 生效,对写在判断语句里面的全部代码都会生效。get
(3)实际项目中 CSS Hack 大部分是针对 IE 浏览器不一样版本之间的表现差别而引入的。
通常是将适用范围广、被识别能力强的 CSS 定义在前面。
这种方式是 IE 浏览器专有的 Hack 方式,微软官方推荐使用的 hack 方式。
<!--[if IE]> 这段文字只在 IE 浏览器显示 <![endif]-->
<!--[if IE 6]> 这段文字只在 IE6 浏览器显示 <![endif]-->
<!--[if gte IE 6]> 这段文字只在 IE6以上(包括) 浏览器显示 <![endif]-->
<!--[if ! IE 8]> 这段文字只在 非IE8 浏览器显示 <![endif]-->
<!--[if ! IE]> 这段文字只在 非IE 浏览器显示 <![endif]-->
属性前缀法是在 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 | Y | N | Y | N | Y |
+ | +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:red0 | 红色 | N | N | N | N | Y | N | Y | N | Y | N |
90 | color:red90 | 粉色 | N | N | N | N | N | N | Y | N | Y | N |
!important | color:blue !important;color:green; | 棕色 | N | N | Y | N | Y | N | Y | N | Y | Y |
(1)“ -
″IE6 生效,专有的 hack
(2)“ \9
″ IE6 / IE7 / IE8 / IE9 / IE10 都生效
(3)“ \0
″ IE8 / IE9 / IE10 都生效
(4)“ \9\0
″ IE9 / IE10 生效
选择器前缀法是针对页面表现不一致或者须要特殊对待的浏览器,在 CSS 选择器前加上只有某些特定浏览器才能识别的前缀进行 hack。