针对IE和!IE

时间:2014-08-26 20:29:56

标签: html css internet-explorer if-statement internet-explorer-11

我知道有关于此问题的1&000;但我无法使其发挥作用。 我只是想针对IE的所有版本(包括IE11)并给html一个特定的类,对于所有其他浏览器(firefox,opera,chrome)我希望html有另一个类甚至根本没有类。这是我的非工作代码:

<!-- [if IE] --> <html lang="en" class="legacy"><!-- [endif] -->
<!-- [if !IE] --> <html lang="en" class="modern"><!-- [endif] -->

这有什么问题?我到处都有class="legacy":\

针对任何IE浏览器的通用JavaScript解决方案也会做得很好!

这是用例:

我正在使用skrollr jquery插件,并且我用enquire.js为移动设备销毁它,因为它没有在浏览器上工作(并且部分不在IE11中工作......是的.. IE在任何情况下都没有得到正确的答案)我有一个看起来像这样的功能:

var $html = $("html");

function enableSkrollr() {

    var s = skrollr.init({
        forceHeight : false
    });
}//enable

function disableSkrollr() {

    var s = skrollr.init();
    s.destroy();

}//disable

if ($html.hasClass("modern")) {
    enquire.register("screen and (min-width: 1140px)", {
        match : function() {
            enableSkrollr();
        },
        unmatch : function() {
            disableSkrollr();
        }
    });
};

所以我依赖modern标记中的html

2 个答案:

答案 0 :(得分:1)

要使用CSS定位IE10 +,请使用具有仅IE支持的规则的媒体查询。

示例,其中.class<!-- [if !IE] --> html标记的类:

.class {
    background-color: red;
    width: 150px;
    height: 150px;
}

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
    /* IE10+ styles go here */
    .class {
        background-color: gray;
    }
}

JSFiddle

继续使用条件评论来定位旧版本的IE。

编辑:您也可以检查媒体查询是否也匹配,而不是让您的javascript检测到该类:

if (document.getElementsByTagName('html')[0].className === 'modern') {
    var mql = window.matchMedia("screen and (-ms-high-contrast: active), (-ms-high-contrast: none)");
    mql.addListener(handleMediaQuery);
    handleMediaQuery(mql);

    function handleMediaQuery(mql) {
        if (mql.matches) {
            console.log('ie')
        }
    }
}

您可能希望使用jQueryenquire.js代替纯JavaScript执行此操作。

Demo Fiddle

答案 1 :(得分:0)

这个答案只是试图解释这有什么问题?问题的一部分......

以下是您展示的专栏:

<!-- [if IE] --> <html lang="en" class="legacy"><!-- [endif] -->
<!-- [if !IE] --> <html lang="en" class="modern"><!-- [endif] -->

在第一行中,第一部分<!-- [if IE] -->是评论,条件评论,因为您通常使用-->

关闭它

第二部分<html lang="en" class="legacy">是一个普通的html标记,所有浏览器再次看到,因为您关闭了第一条评论。

第三部分<!-- [endif] -->也是一个普通的HTML注释,带有标准的开放和关闭注释字符序列。

如果您只想让IE看到该行,则需要使用IE条件注释序列

<!--[if IE]><html lang="en" class="legacy"><![endif]-->

但是,这仅适用于IE 9及更低版本 - 从IE 10开始,对条件注释的支持被删除。这可能没问题,因为可以将IE 10和IE 11视为class="modern",如果需要,您可以使用feature detection添加shim

您的第二行(以<!-- [if !IE] -->开头)也是正常评论,因此所有浏览器会看到此<html>标记。

获得正确的语法对你没有帮助,因为只有IE会处理条件评论并决定忽略内容,因为IE !IE

@ sbeliv01发布到stackoverflow.com/a/14555015/634752的链接解释了如何执行此操作,使用条件注释关闭注释(!)