iehack, ie8 ie9 ie10 hack ie兼容写法大全【重要】

  • -″减号是IE6专有的hack
  • “\9″ IE6/IE7/IE8/IE9/IE10都生效
  • “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
  • “\9\0″ 只对IE9/IE10生效,是IE9/10的hack
  • \0/  IE8 only

 原文地址:https://blog.csdn.net/freshlover/article/details/12132801

demo如下:

    <script type="text/javascript">
        //alert(document.compatMode);
    </script>
    <style type="text/css">
    body:nth-of-type(1) .iehack{
        color: #F00;/* 对Windows IE9/Firefox 7+/Opera 10+/所有Chrome/Safari的CSS hack ,选择器也适用几乎全部Mobile/Linux/Mac browser*/
    }
    .demo1,.demo2,.demo3,.demo4{
        width:100px;
        height:100px;
    }
    .hack{
    /*demo1 */
    /*demo1 注意顺序,否则IE6/7下可能无法正确显示,导致结果显示为白色背景*/
        background-color:red; /* All browsers */
        background-color:blue !important;/* All browsers but IE6 */
        *background-color:black; /* IE6, IE7 */
        +background-color:yellow;/* IE6, IE7*/
        background-color:gray\9; /* IE6, IE7, IE8, IE9, IE10 */
        background-color:purple\0; /* IE8, IE9, IE10 */
        background-color:orange\9\0;/*IE9, IE10*/
        _background-color:green; /* Only works in IE6 */
        *+background-color:pink; /*  WARNING: Only works in IE7 ? Is it right? */
    }
     
    /*可以通过javascript检测IE10,然后给IE10的<html>标签加上class=”ie10″ 这个类 */
    .ie10 #hack{
        color:red; /* Only works in IE10 */
    }
     
    /*demo2*/
    .iehack{
    /*该demo实例是用于区分标准模式下ie6~ie9和Firefox/Chrome的hack,注意顺序
    IE6显示为:绿色,
    IE7显示为:黑色,
    IE8显示为:红色,
    IE9显示为:蓝色,
    Firefox/Chrome显示为:橘色,
    (本例IE10效果同IE9,Opera最新版效果同IE8)
    */
        background-color:orange;  /* all - for Firefox/Chrome */
        background-color:red\0;  /* ie 8/9/10/Opera - for ie8/ie10/Opera */
        background-color:blue\9\0;  /* ie 9/10 - for ie9/10 */
        *background-color:black;  /* ie 6/7 - for ie7 */
        _background-color:green;  /* ie 6 - for ie6 */
    }
     
    /*demo3
    实例是用于区分标准模式下ie6~ie9和Firefox/Chrome的hack,注意顺序
    IE6显示为:红色,
    IE7显示为:蓝色,
    IE8显示为:绿色,
    IE9显示为:粉色,
    Firefox/Chrome显示为:橘色,
    (本例IE10效果同IE9,Opera最新版效果也同IE9为粉色)
    */
    .element {
        background-color:orange;    /* all IE/FF/CH/OP*/
    }
    .element {
        *background-color: blue;    /* IE6+7, doesn't work in IE8/9 as IE7 */
    }
    .element {
        _background-color: red;     /* IE6 */
    }
    .element {
        background-color: green\0; /* IE8+9+10  */
    }
    :root .element { background-color:pink\0; }  /* IE9+10 */
     
    /*demo4*/
    /*
    该实例是用于区分标准模式下ie6~ie10和Opera/Firefox/Chrome的hack,本例特别要注意顺序
    IE6显示为:橘色,
    IE7显示为:粉色,
    IE8显示为:黄色,
    IE9显示为:紫色,
    IE10显示为:绿色,
    Firefox显示为:蓝色,
    Opera显示为:黑色,
    Safari/Chrome显示为:灰色,
    */
    .hacktest{ 
        background-color:blue;      /* 都识别,此处针对firefox */
        background-color:red\9;      /*all ie*/
        background-color:yellow\0;    /*for IE8/IE9/10 最新版opera也认识*/
        +background-color:pink;        /*for ie6/7*/
        _background-color:orange;       /*for ie6*/
    }
     
    @media screen and (min-width:0){ 
        .hacktest {background-color:black\0;}  /*opera*/
    } 
    @media screen and (min-width:0) { 
        .hacktest { background-color:purple\9; }/*  for IE9/IE10  PS:国外有些习惯常写作\0,根本没考虑Opera也认识\0的实际 */
    }
    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { 
       .hacktest { background-color:green; } /* for IE10+ 此写法可以适配到高对比度和默认模式,故可覆盖所有ie10的模式 */
    }
    @media screen and (-webkit-min-device-pixel-ratio:0){ .hacktest {background-color:gray;} }  /*for Chrome/Safari*/
     
    /* #963棕色 :root is for IE9/IE10, 优先级高于@media, 慎用!如果二者合用,必要时在@media样式加入 !important 才能区分IE9和IE10 */
    /*
    :root .hacktest { background-color:#963\9; } 
    */
    </style>

CSS hack方式三:选择器前缀法

选择器前缀法是针对一些页面表现不一致或者需要特殊对待的浏览器,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀进行hack。

目前最常见的是

*html *前缀只对IE6生效
*+html *+前缀只对IE7生效
@media screen\9{...}只对IE6/7生效
@media \0screen {body { background: red; }}只对IE8有效
@media \0screen\,screen\9{body { background: blue; }}只对IE6/7/8有效
@media screen\0 {body { background: green; }} 只对IE8/9/10有效
@media screen and (min-width:0\0) {body { background: gray; }} 只对IE9/10有效
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只对IE10有效
等等

CSS3选择器结合JavaScript的Hack

我们用IE10进行举例:

由于IE10用户代理字符串(UserAgent)为:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0),所以我们可以使用javascript将此属性添加到文档标签中,再运用CSS3基本选择器匹配。

JavaScript代码:

	var htmlObj = document.documentElement;
	htmlObj.setAttribute('data-useragent',navigator.userAgent);
	htmlObj.setAttribute('data-platform', navigator.platform );

CSS3匹配代码:

html[data-useragent*='MSIE 10.0'] #id {
	color: #F00;
}

CSS hack利弊

一般情况下,我们尽量避免使用CSS hack,但是有些情况为了顾及用户体验实现向下兼容,不得已才使用hack。比如由于IE8及以下版本不支持CSS3,而我们的项目页面使用了大量CSS3新属性在IE9/Firefox/Chrome下正常渲染,这种情况下如果不使用css3pie或htc或条件注释等方法时,可能就得让IE8-的专属hack出马了。使用hack虽然对页面表现的一致性有好处,但过多的滥用会造成html文档混乱不堪,增加管理和维护的负担。相信只要大家一起努力,少用、慎用hack,未来一定会促使浏览器厂商的标准越来越趋于统一,顺利过渡到标准浏览器的主流时代。抛弃那些陈旧的IE hack,必将减轻我们编码的复杂度,少做无用功。

 

 原文地址:https://blog.csdn.net/freshlover/article/details/12132801

 

posted @ 2018-09-12 09:35  Shimily  阅读(788)  评论(0)    收藏  举报