3

我无法理解 HTML5 样板中 IE 条件注释中的一处。这是关于这部分:

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

以下两种情况很简单,

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

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

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

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

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

4

2 回答 2

2

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

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

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

或者简单地说:

""

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

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

即(爆炸的)第一行和最后一行本身就是完整的注释

<!--[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">
于 2013-10-08T10:06:05.123 回答
0

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

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

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 中。如果它打开评论,当然,“未打开评论”位会消失。

于 2013-08-30T00:25:10.733 回答