<!-[如果!IE]>不起作用


139

我遇到困难

<!--[if !IE]>

上班。我想知道是否是因为我的文件中有这个

<!doctype html>
<!--[if lt IE 7]> <html class="ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html class="ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html class="ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="">
<!--<![endif]-->

当我添加

<!--[if !IE]><!-->
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css" />
<!--<![endif]-->

出于某种原因无法连接到我的标头。但是,如果我添加

<!--[if !IE]><!-->
    <style>
        All my css in here
    </style>
    <!--<![endif]-->

到实际的html页面(在标题中)。有什么建议?干杯

更新我的问题

好的,当我删除时, <!-->我只检查了正在运行的IE,但现在回到FF中,no-ie.css也已应用于FF。因此,我重新添加<!-->了/并删除了/(并将其添加到主模板中,以便cms不会将其重新添加回去),所有这些都在FF中恢复正常,但是现在将样式表应用于IE!所以我尝试了

<!--[if IE]>
<link type="text/css" rel="stylesheet" href="https://stackoverflow.com/stylesheets/no-ie.css">
<![endif]-->

<!--[if !IE]> -->
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css">
<!-- <![endif]-->

那没有用。基本上我试图让这个页面工作http://css-tricks.com/examples/ResponsiveTables/responsive.php但移动到CSS样式表。当然,这必须很简单。我想念什么?如果不需要,我宁愿不使用JQuery。干杯


1
您不需要<!--><!--[if !IE]>
techfoobar

29
注意:如果IE仅适用于IE9。
cameronjonesweb 2014年

有些人在某些页面上留下了有趣的IF IE消息。
neverMind9

@cameronjonesweb您能链接参考吗,否则像这样的陈述没有用?
trainoasis

@trainoasis,我可以,除了我的评论是5岁
cameronjonesweb

Answers:


236
<!--[if !IE]><!--><script src="zepto.min.js"></script><!--<![endif]-->
<!--[if IE]><script src="jquery-1.7.2.min.js"></script><![endif]-->

注意:IE 10及更高版本不再支持这些条件注释 。


39
截至2013年6月,这是此页面上唯一正确的答案。
JohnB

2
这条线缺少右尖括号吗?不应该是:<!-[if!IE]> <!-> <script src =“ zepto.min.js”> </ script> <!-> <![endif]->
n00shie

1
这以及所有其他条件注释解决方案,将不会检测到IE 10 / IE 11
劳埃德银行

9
即使条件为!IE,它在IE 11中也不起作用,它会加载脚本!
Giedrius 2013年

49
@Giedrius从IE10开始,不再支持条件注释:msdn.microsoft.com/en-us/library/ie/hh801214
v=vs.85).aspx

70

IE以外的浏览器将条件语句视为注释,因为它们被包含在注释标记内。

<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->

但是,当您定位的浏览器不是IE时,则必须使用2条注释,其中1条注释位于代码之后。IE将忽略它们之间的代码,而其他浏览器会将其视为普通代码。因此,针对非IE浏览器的语法为:

<!--[if !IE]-->
IE ignores this
<!--[endif]-->

注意:IE 10及更高版本不再支持这些条件注释。


1
那很棒。感谢那。样式表有效,但是我现在遇到的问题是,页面顶部位于标题上方,即<!-[if!IE]-> <!-[endif]->(标记去了在标题区域而不是正文中)
user1516788 2013年

21
-1:这个答案是错误的,因为<!--[if !IE]-->IE ignores this<!--[endif]-->没有被IE隐藏!(7、8或9)
JohnB

3
没有一个答案对我有用,也许是在最近发布的IE10中发生了一些变化(也在IE9模式下尝试过)。-所有尝试最终都在所有浏览器(IE而非IE)上到达!IE部分。
Danny Varod

2
IE10不支持条件语句。
Scorpius

1
注意空格的<! - [如果IE]>和<[ENDIF] - > -不应该有任何空格(如间-和[它不工作与空格。
罗伯特Skarżycki'13

37

如果有人仍然到达此页面的更新,想知道为什么目标定位不起作用。IE 10及更高版本不再支持条件注释。从MS官方网站:

Internet Explorer 10标准和怪异模式中已删除了对条件注释的支持,以提高互操作性和与HTML5的兼容性。

请参阅此处以了解更多详细信息:http : //msdn.microsoft.com/zh-cn/library/ie/hh801214(v=vs.85).aspx

如果您急需定位到ie,则可以使用此jquery代码向其中添加ie类,然后在CSS中使用.ie class定位至ie浏览器。

if ($.browser.msie) {
 $("html").addClass("ie");
}

更新:$ .browser在jQuery 1.9之后不可用。如果您升级到1.9或更高版本的jQuery或已经使用过,则可以在jQuery之后包含jQuery迁移脚本,以便它添加缺少的部分: jQuery Migrate Plugin

或者,请检查此线程以获取可能的解决方法:更新至jQuery 1.9.1后出现browser.msie错误。


这是一个非常好的解决方案!我什至不需要在dom树上使用它来应用某些类。
毫米

2
请注意,这是因为jQuery的1.3弃用,在1.9去除
Jøran


12

Microsoft推荐的下层显示条件“注释”的语法是这样的:

<![if !IE]>
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css" />
<![endif]>

这些不是评论,但它们可以正常工作。


找到了支持此答案的链接,也有很多其他信息可以帮助该线程,我认为这是一个重要主题……我唯一的区别是是否使用了隐藏或显示的语法,而且我不确定将影响其他浏览器... msdn.microsoft.com/en-us/library/ms537512.ASPX
user1360809 2013年


8

首先,正确的语法是:

<!--[if IE 6]>
<link type="text/css" rel="stylesheet" href="https://stackoverflow.com/stylesheets/ie6.css" />
<![endif]-->

试试这篇文章:http : //www.quirksmode.org/css/condcom.htmlhttp://css-tricks.com/how-to-create-an-ie-only-stylesheet/

您可以做的另一件事:

使用jQuery检查浏览器:

if($.browser.msie){ // do something... }

在这种情况下,您可以更改某些元素的CSS规则或添加新的CSS链接参考:

阅读此:http : //rickardnilsson.net/post/2008/08/02/Applying-stylesheets-dynamically-with-jQuery.aspx


有关更准确的答案,请参见上面的user1324409的答案。
克里斯·彼得斯

2
由于jQuery的更新,使用$ .browser.msie的任何人都必须包含jquery-migrate.js,这样才能正常工作。
AspiringCanadian


答案中提供的链接无效。
Pankaj

8

您需要为<!-- [if !IE] --> 我的完整css块放置一个空格,如下所示,因为IE8在媒体查询中非常糟糕

<!-- IE 8 or below -->   
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css"  href="https://stackoverflow.com/Resources/css/master1300.css" />        
<![endif]-->
<!-- IE 9 or above -->
<!--[if gte IE 9]>
<link rel="stylesheet" type="text/css" media="(max-width: 100000px) and (min-width:481px)"
    href="https://stackoverflow.com/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="https://stackoverflow.com/Resources/css/master480.css" />        
<![endif]-->
<!-- Not IE -->
<!-- [if !IE] -->
<link rel="stylesheet" type="text/css" media="(max-width: 100000px) and (min-width:481px)"
    href="/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="/Resources/css/master480.css" />
<!-- [endif] -->

感谢您的评论,但如果我使用<!-[if!IE]-> <link rel =“ stylesheet” type =“ text / css” href =“ / stylesheets / no-ie.csss” /> <! -[endif]->然后其他浏览器也将其应用。
user1516788 2013年

3
让其他浏览器应用该部分不是重点吗?
John Hayford 2013年

1
-1:该!IE技术此处提到通过将10实际执行的注释块为IE 7
伊恩坎贝尔


8

针对IE用户:

<!--[if IE]>
Place Content here for Users of Internet Explorer.
<![endif]-->

针对其他所有人:

<![if !IE]>
Place Content here for Users of all other Browsers.
<![endif]>

条件注释只能由Internet Explorer检测到,所有其他浏览器都将其作为普通注释进行处理。

要定位IE 6,7等。您必须在If语句中使用“大于等于”或“小于等于”。像这样。

大于或等于:

<!--[if gte IE 7]>
Place Content here for Users of Internet Explorer 7 or above.
<![endif]-->

小于:

<!--[if lt IE 6]>
Place Content here for Users of Internet Explorer 5 or lower.
<![endif]-->

资料来源:mediacollege.com



7

这是直到IE9

<!--[if IE ]>
<style> .someclass{
    text-align: center;
    background: #00ADEF;
    color: #fff;
    visibility:hidden;  // in case of hiding
       }
#someotherclass{
    display: block !important;
    visibility:visible; // in case of visible

}
</style>

这是针对IE9之后的

  @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {enter your CSS here}

5

对于IE浏览器:

<!--[if IE]>
<meta http-equiv="Content-Type" content="text/html; charset=Unicode">
<![endif]-->

对于所有非IE浏览器:

<![if !IE]>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<![endif]>

对于大于8的所有IE或所有非IE浏览器:

<!--[if (gt IE 8)|!(IE)]><!--><script src="/_JS/library/jquery-2.1.1.min.js"></script><!--<![endif]-->

3

条件注释是从<!--[if IE]>IE以外的任何浏览器都无法读取的注释开始。

从2011年开始不支持Microsoft当时宣布的从IE 10开始的条件注释https://msdn.microsoft.com/zh-cn/library/hh801214(v=vs.85).aspx

使用条件注释的唯一选项是请求IE以支持条件注释的IE 9的身份运行您的网站。

您可以仅针对自己编写CSS和/或JS文件,而其他浏览器将不会加载或执行该文件。

此代码段显示了如何使IE 10或11运行ie-only.css和ie-only.js,其中包含用于解决IE兼容性问题的自定义代码。

    <html>
      <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
      <!--[if IE]>
            <meta http-equiv="Content-Type" content="text/html; charset=Unicode">
            <link rel="stylesheet" type="text/css" href='/css/ie-only.css' />
            <script src="/js/ie-only.js"></script>
      <![endif]-->
    </html>


1

这适用于所有大于6版本的浏览器(IE7、8、9、10等,Chrome 3直至当前版本,FF ver 3直至当前版本):

//test if running in IE or not
        function isIE () {
            var myNav = navigator.userAgent.toLowerCase();
            return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
        }

0

我正在使用此javascript检测IE浏览器

if (
    navigator.appVersion.toUpperCase().indexOf("MSIE") != -1 ||
    navigator.appVersion.toUpperCase().indexOf("TRIDENT") != -1 ||
    navigator.appVersion.toUpperCase().indexOf("EDGE") != -1
)
{
    $("#ie-warning").css("display", "block");
}

0

谢谢Fernando68,我用了这个:

function isIE () {
     var myNav = navigator.userAgent.toLowerCase();
     return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
}

if(isIE()){
     $.getScript('js/script.min.js', function() {
            alert('Load was performed.');
     });
}

-1

我在浏览器上可以看到以下代码:

<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
  <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->

此代码的注释:HTML5 Shiv和Respond.js IE8对HTML5元素和媒体查询的支持

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.