【问题标题】:Need to understand IE conditional comments inside the HTML5-boilerplate需要了解 HTML5-boilerplate 中的 IE 条件注释
【发布时间】:2013-09-01 08:53:02
【问题描述】:

我无法理解 HTML5 样板中 IE 条件 cmets 中的一个位置。 这是关于这部分的:

<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->

下面两种情况比较直接,

  1. 在IE6/7的情况下,条件“if gt IE 8”为FALSE,所以输出&lt;!-- --&gt;
  2. 在非 IE 的情况下,“[if gt IE8]”和“[endif]”无法识别,因此“&lt;!--[if gt IE 8]&gt;&lt;!--&gt;”和“&lt;!--&lt;![endif]--&gt;”是标准的 HTML cmets。所以它输出&lt;html class="no-js"&gt;;

让我困惑的是 IE9 的情况。 在 IE9 的情况下,条件“if gt IE 8”为 TRUE,所以它输出 IE 条件的主体:

<!--> <html class="no-js"> <!--
  1. &lt;!--&gt; 为空评论;
  2. &lt;html class="no-js"&gt; 是常规的 HTML 输出;

但是结尾“&lt;!--”呢?它是如何处理的?在我看来,这个开始的评论标签会把它后面的所有东西都变成 cmets,直到它遇到一个结束标签“--&gt;”。这不是一个大问题吗?

但我从未见过有人对此提出质疑。所以我错过了什么吗? 有人可以向我解释一下吗?任何帮助表示赞赏。

【问题讨论】:

  • &lt;!--&gt; 不是空的 HTML 注释。一个空的评论会有四个减号。
  • Lister:那你觉得IE9如何解析

标签: html internet-explorer comments conditional-statements html5boilerplate


【解决方案1】:

在 IE9 的情况下,条件“if gt IE 8”为 TRUE

确实 - 所以发生的情况是,其他版本的 IE 认为评论是这样的:

<!--[if not my version]>
    Remove/ignore everything
<![endif]-->

或者简单地说:

""

对于 IE9,条件 cmets 的处理方式与任何其他注释一样:

<!--[if gt IE 8]><!-->
    <html class="no-js"> 
<!--<![endif]-->

即(分解的)第一行和最后一行本身就是完整的 cmets

<!--[if gt IE 8]><!-->
^ start of a comment
    ^.............^ content not relevant
                   ^ end of a comment - first occurrence of `-->`

因此浏览器(无论是 IE9+ 还是非 Internet Explorer)只能看到:

<html class="no-js">

【讨论】:

    【解决方案2】:

    我无法指出他们如何解析这些的任何实际参考(CC 一直很少有文档记录)并且不记得是谁提出了这种模式,但 IE 没有通过&lt;!--&gt; &lt;html class="no-js"&gt; &lt;!-- 它只通过了@ 987654323@ 它将每个完整的、有效的注释块组合为条件 cmets 的开始和结束。

    这是一个示例,表明它没有通过开放评论

    http://htmlcssjavascript.com/samples/cc.html

    <!--[if IE 8]>        <p>IE8</p> <![endif]-->
    <!--[if gt IE 8]><!--> <p>IE9+</p> <!--<![endif]-->
    Not an open comment
    -->
    

    输出....

    "IE9+

    不是一个开放的评论 -->"

    在 IE9 中。如果它打开评论,当然,“未打开评论”位会消失。

    【讨论】:

    • 对不起,我在测试后玩弄了它。我会调整回原来的例子。
    • 实际上,经过仔细考虑,我想出了一种不同的方式来说明发生了什么。
    猜你喜欢
    • 2012-02-24
    • 2016-07-22
    • 2011-02-04
    • 1970-01-01
    • 2012-05-23
    • 2011-10-30
    • 2020-07-09
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多