需要理解HTML5-boilerplate中的IE条件注释

3

我不理解在HTML5-boilerplate中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输出;

但是关于结束标签 "<!--" 呢?它会如何处理呢?在我看来,这个开始注释标签将会把其后的所有内容都变成注释,直到遇到结束标签 "-->"。这难道不是一个很大的问题吗?

但是我从未见过有人对此提出疑问。所以我是不是漏了什么?能否有人向我解释一下?非常感谢。


“<!-->” 不是一个空的 HTML 注释。一个空的注释应该有四个减号。 - Mr Lister
Lister:那你认为IE9如何解析<!--> <html class="no-js"> <!--? - dikko2000
重要提醒:自IE10起,微软已停止支持有条件的注释。更多详情请点击此处 - RBT
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">

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+中输出...

"不是一个开放的注释-->"

如果它保留了一个开放的注释,那么"不是一个开放的注释"这一部分将会消失。


抱歉,在测试后我对它进行了一些调整。我会将其调整回原始示例。 - roblarsen
其实,仔细想想,我找到了一种不同的方式来说明发生的事情。 - roblarsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接