4

给定代码(看起来应该是有效的):

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

W3C 验证器抛出一个合适的:

  • 注释声明中的 S 分隔符
  • 无效的注释声明:在注释外部但在注释声明内部找到名称开始字符
  • 此处不允许使用字符数据

等等等等

我不完全确定发生了什么。是“嵌套”评论吗?该标签由 Zend Framework Viewhelper headStyle 生成

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

6 回答 6

7

除非它是有效 XML/XHTML 结尾--的一部分,否则不能有内部注释。-->就像评论的工作方式一样。

这个来源

为了兼容性,字符串“--”(双连字符)不得出现在注释中。

您应该找到一种更标准的方法来区分浏览器(或者,更理想的是,有一个根本不需要区分浏览器的布局)。

于 2009-06-04T16:23:14.700 回答
6

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

于 2009-06-04T16:25:00.457 回答
2

它是嵌套的评论。他们是不允许的。

于 2009-06-04T16:25:24.450 回答
0

...为什么要注释掉 的全部内容<style>?这并不是说您正在为一个愚蠢到可以显示它的浏览器编写代码。(甚至命令行浏览器也会隐藏样式/脚本块。)

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

于 2009-06-04T17:07:47.420 回答
0

您应该在问题跟踪器上发布新问题。这是纠正此类错误的好方法。 http://framework.zend.com/issues/secure/Dashboard.jspa

于 2009-06-04T18:17:29.437 回答
0

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>

这些文章更详细地说明了为什么上述解决方案是正确的:

于 2015-04-07T15:23:28.427 回答