2009-06-04 75 views
4

由于代码(这看起来应该是有效的):条件注释并且有效的XHTML

<!--[if lt IE 7]> <style type="text/css" media="screen"> 
<!-- 
div.stuff { background-image: none; } 
--></style><![endif]--> 

W3C验证抛出一个适合:

  • 器分离在评论声明
  • 无效注释声明:发现名称开始字符外部注释但内部注释声明
  • 字符数据不允许在这里

等等等等

我不能完全肯定怎么回事。这是'嵌套'的评论?是由Zend框架视图助手headStyle

$this->headStyle()->prependStyle('div.stuff { background-image: none; }', 
           array('conditional' => 'lt IE 7') 
           ); 

回答

6

-->”关闭任何评论,没有嵌套评论的概念。所以在你的代码中,第一个“-->”关闭了你的两条评论。然后,<![endif]-->完全在任何评论之外,所以没有任何意义。

7

生成的代码你不能有一个--评论里面,除非它在有效的XML/XHTML结束-->的一部分。只是评论的工作方式。

this source

出于兼容性考虑,字符串 “ - ”(双连字符)不能在注释中出现。

您应该找到一种更为标准的方式来区分浏览器(或者更理想的是,布局不需要根据浏览器进行区分)。

+0

所以注释掉JavaScript元素可以打破文件?这很奇怪......规范中的相关部分是http://www.w3.org/TR/REC-xml/#sec-comments,它指出“为了兼容性”的意思是“仅包含用于确保XML仍然存在与SGML兼容“。 – Tomalak 2009-06-04 16:34:15

2

这是嵌套注释。他们不被允许。

0

...为什么要注释掉<style>的全部内容?这并不像你编写的浏览器足够愚蠢的显示它。 (即使命令行浏览器也隐藏了样式/脚本块。)

编辑:啊,等等。这是由Zend生成的。

0

answer given by Phil Booth是在你的HTML注释正确语法是不正确; HTML注释不能嵌套。不过,我想更进一步...

您不应该使用HTML注释来隐藏您的CSS或JavaScript从XHTML验证。相反,你应该使用CDATA标签。这是最通用的解决方案,几乎支持所有浏览器和浏览器版本。

<head> 
    <style type="text/css"> 
    /* <![CDATA[ */ 
    div.stuff { background-image: none; } 
    /* ]]> */ 
    </style> 
    <script type="text/javascript"> 
    /* <![CDATA[ */ 
    function myFunction() { 
    } 
    /* ]]> */ 
    </script> 
</head> 

这些文章进入更详细了解为何上述方案是正确的: