<!--[if !IE]> 不工作

Posted

技术标签:

【中文标题】<!--[if !IE]> 不工作【英文标题】:<!--[if !IE]> is not working as expected in this case 【发布时间】:2012-11-26 23:01:42 【问题描述】:

我遇到了麻烦

<!--[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 页面(在标题中)。 有什么建议? 干杯

更新我的问题

好的,当我删除时 &lt;!--&gt;我只检查了 IE,它正在工作,但现在回到 FF,no-ie.css 也已应用于 FF。所以我在&lt;!--&gt; 中重新添加并删除了/(并将其添加到主模板中,这样cms 就不会将其重新添加)并且一切都在FF 中工作,但现在样式表正在应用于IE! 所以我尝试了

<!--[if IE]>
<link type="text/css" rel="stylesheet" href="/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。 干杯

【问题讨论】:

你不需要紧跟在&lt;!--[if !IE]&gt;之后的&lt;!--&gt; 注意:如果 IE 只能运行到 IE9。 有些人在某些页面上留下了有趣的 IF IE 消息。 @cameronjonesweb 你能链接参考吗,否则这样的陈述没有那么有用? @trainoasis,我可以,除了我的评论是 5 岁 【参考方案1】:

首先正确的语法是:

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

试试这个帖子: http://www.quirksmode.org/css/condcom.html 和 http://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 的答案以获得更准确的答案。 由于 jQuery 更新,任何使用 $.browser.msie 的人都必须包含 jquery-migrate.js,然后这将起作用。 注意:这些条件cmets是no longer supported from IE 10 onwards 答案中提供的链接已失效。【参考方案2】:

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

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

但是,当您的目标浏览器不是 IE 时,您必须使用 2 个 cmets,一个在代码之前,一个在代码之后。 IE 会忽略它们之间的代码,而其他浏览器会将其视为普通代码。因此,针对非 IE 浏览器的语法是:

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

注意:这些条件 cmets 是 no longer supported from IE 10 onwards。

【讨论】:

太好了。感谢那。样式表可以工作,但是我现在遇到的问题是,在页面顶部的标题上方,它出现在 ie (标签去了在标题区域而不是正文中) -1:这个答案不正确,因为&lt;!--[if !IE]--&gt;IE ignores this&lt;!--[endif]--&gt; 没有对 IE 隐藏! (7、8 或 9) 没有一个答案对我有用,也许在最近发布的 IE10 中发生了一些变化(也在 IE9 模式下尝试过)。 - 所有尝试最终都到达所有浏览器(IE 和非 IE)上的 !IE 部分。 IE10 不支持条件语句。 注意 中的空格 - 不应该有任何空格(例如在 !-- 和 [.不能使用空格。【参考方案3】:

您需要为&lt;!-- [if !IE] --&gt; 留一个空格我的完整css 块如下所示,因为IE8 的媒体查询很糟糕

<!-- IE 8 or below -->   
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css"  href="/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="/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="/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] -->

【讨论】:

感谢您的评论,但如果我使用 然后其他浏览器也应用这个。 不是重点,让其他浏览器应用该部分吗? -1:这里提到的!IE 技术实际上会执行 IE 7 到 10 的注释块。 注意:这些条件cmets是no longer supported from IE 10 onwards【参考方案4】:
<!--[if !IE]><!--><script src="zepto.min.js"></script><!--<![endif]-->
<!--[if IE]><script src="jquery-1.7.2.min.js"></script><![endif]-->

注意:这些条件 cmets 是 no longer supported from IE 10 onwards.

【讨论】:

截至 2013 年 6 月,这是此页面上唯一的正确答案。 这一行是否缺少右尖括号?不应该是: 这与所有其他条件 cmets 解决方案一起,不会检测 IE 10 / IE 11 它在 IE 11 中不起作用,它加载脚本,即使条件是 !IE @Giedrius 从 IE10 开始,不再支持条件 cmets:msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx【参考方案5】:

我使用它并且它有效:

<!--[if !IE]><!--> if it is not IE <!--<![endif]-->

【讨论】:

这导致 Firefox 只是将整个内容视为我的评论。 @Charmander 解决方案适用于 IE 和 Firefox - 注意:这些条件cmets是no longer supported from IE 10 onwards【参考方案6】:

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

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

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

【讨论】:

找到这个支持这个答案的链接,还有很多其他可以帮助线程的信息,我认为这是一个重要的主题......我看到的唯一区别是隐藏或显示的语法是使用过,我不确定这会如何影响其他浏览器...msdn.microsoft.com/en-us/library/ms537512.ASPX 注意:这些条件cmets是no longer supported from IE 10 onwards【参考方案7】:

针对 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]-->

Source: mediacollege.com

【讨论】:

注意:这些条件cmets是no longer supported from IE 10 onwards【参考方案8】:

如果有人仍然访问此页面,想知道为什么 ie 定位不起作用,则更新。 IE 10 及更高版本不再支持条件 cmets。来自微软官网:

已在 Internet Explorer 中删除对条件 cmets 的支持 10 种标准和怪癖模式,用于提高互操作性和 符合 HTML5。

更多详情请看这里:http://msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx

如果您迫切需要定位 ie,您可以使用此 jquery 代码添加一个 ie 类,然后在您的 css 中使用 .ie 类来定位 ie 浏览器。

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

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

或者,请查看此线程以了解可能的解决方法:browser.msie error after update to jQuery 1.9.1

【讨论】:

这是一个非常好的解决方案!我什至不需要在 dom 树上使用它来应用某些类。 请注意,自 jQuery 1.3 起已弃用,并在 1.9 中删除【参考方案9】:

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]-->

【讨论】:

【参考方案10】:

我得到这个代码在我的浏览器上工作:

<!--[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 元素和媒体查询

【讨论】:

【参考方案11】:

条件注释是以&lt;!--[if IE]&gt;开头的注释,除了IE之外的任何浏览器都无法读取。

从 2011 年起,不支持从 IE 10 开始的条件注释,正如微软当时宣布的那样 https://msdn.microsoft.com/en-us/library/hh801214(v=vs.85).aspx

使用条件 cmets 的唯一选项是请求 IE 以支持条件 cmets 的 IE 9 运行您的站点。

您可以编写自己的 css 和/或 js 文件,仅用于 ie,其他浏览器不会加载或执行它。

这段代码 sn-p 展示了如何让 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>

【讨论】:

【参考方案12】:

如果您使用的是 IE 10 或更高版本,如 http://tanalin.com/en/articles/ie-version-js/ 中所述,不再支持条件 cmets。 您可以参考https://gist.github.com/jasongaylord/5733469 作为替代方法,该方法也会从 navigator.userAgent 中检查 Trident 版本。如果浏览器在兼容模式下工作,这也会得到验证。

【讨论】:

【参考方案13】:

我正在使用这个 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");

【讨论】:

【参考方案14】:

这适用于所有高于版本 6 的浏览器(IE7、8、9、10 等,Chrome 3 到现在的版本,FF 版本 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;
        

【讨论】:

【参考方案15】:

谢谢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.');
     );

【讨论】:

【参考方案16】:

这是 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

【讨论】:

以上是关于<!--[if !IE]> 不工作的主要内容,如果未能解决你的问题,请参考以下文章

网站的 JavaScript 预加载器,它不工作的 IE,

innerHTML 在 FF 中工作,但在 IE 中不工作!

无法使 CKEditor InsertHTML 在 IE 8 上工作

IE e.target.id 不工作

Jquery 对象 innerHTML 在 Firefox 中工作但在 IE 中不工作?

HTML 的占位符属性在 IE10 中无法正常工作