陈斌彬的技术博客

Stay foolish,stay hungry

IE10 和 IE11 CSS Hack

特性检测:@cc_on

我们可以用 IE 私有的条件编译(conditional compilation)结合条件注释来提供针对 ie10 的 Hack:该脚本里面的IE排除条件注释,以确保 IE6-9 不承认它,然后它功能检测到了名为 @ cc_on

代码如下:

<!--[if !IE]><!--><script> 
if (/*@cc_on!@*/false) { 
document.documentElement.className+=' ie10'; 
} 
</script><!--<![endif]--> 

请注意 /*@cc_on ! @*/ 中间的这个感叹号。

这样就可以在 ie10 中给 html 元素添加一个 class=”ie10″,然后针对ie10的样式可以卸载这个这个选择器下:

代码如下:

.ie10 .example { 
/* IE10-only styles go here */ 
} 

考虑到兼容以后的IE版本,比如 IE11,js 代码可以改一下:

复制代码代码如下:

if (/*@cc_on!@*/false) { 
document.documentElement.className+=' ie' + document.documentMode; 
} 

事实上经测试预览版的IE11已经不支持 @ cc_on 语句,不知道正式版会不会支持。不过这样区分 IE11 倒是一件好事。这样修改代码:

<script> 
// 针对IE10 
if (/*@cc_on!@*/false) { 
document.documentElement.className += ' ie' + document.documentMode; 
} 
// 针对IE11及非IE浏览器, 
// 因为IE11下document.documentMode为11,所以html标签上会加ie11样式类; 
// 而非IE浏览器的document.documentMode为undefined,所以html标签上会加ieundefined样式类。 
if (/*@cc_on!@*/true) { 
document.documentElement.className += ' ie' + document.documentMode; 
} 
</script>