需要理解HTML5样板内的IE条件注释

时间:2013-08-29 04:18:21

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

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

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

以下两种情况非常简单,

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

    <!--> <html class="no-js"> <!--
    
    1. <!-->是空的评论;
    2. <html class="no-js">是常规HTML输出;
    3. 但结尾“<!--”呢?怎么处理?在我看来,这个开始的评论标记会将其后面的所有内容转换为评论,直到它遇到结束标记“-->”。这不是一个大问题吗?

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

2 个答案:

答案 0 :(得分:2)

  

对于IE9,条件“如果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">

答案 1 :(得分: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 +

不是公开评论 - &gt;“

在IE9中

。如果它留下评论开放,那么“Not a open comment”位将消失。