【问题标题】:Conditional Comments and Valid XHTML条件注释和有效的 XHTML
【发布时间】:2010-10-31 09:32:27
【问题描述】:

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

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

W3C 验证器很适合:

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

等等等等

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

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

【问题讨论】:

    标签: html zend-framework xhtml conditional-comments


    【解决方案1】:

    您不能在评论中包含--,除非它是--&gt; 的一部分,以有效的XML/XHTML 结尾。就像 cmets 的工作方式一样。

    来自this source

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

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

    【讨论】:

    • 那么注释掉 JavaScript 元素会破坏文档吗?这很奇怪......规范中的相关部分是w3.org/TR/REC-xml/#sec-comments,它指出“为了兼容性”意味着“仅包含在内以确保 XML 与 SGML 保持兼容”。
    【解决方案2】:

    "--&gt;" 关闭任何评论,没有相互嵌套 cmets 的概念。因此,在您的代码中,第一个“--&gt;”会关闭您的两个 cmets。那么&lt;![endif]--&gt; 完全在任何 cmets 之外,所以没有任何意义。

    【讨论】:

      【解决方案3】:

      它是嵌套的 cmets。他们是不允许的。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            answer given by Phil Booth 是正确的,因为您的 HTML 注释 语法 不正确; HTML cmets 不能嵌套。但是,我想更进一步......

            您不应该使用 HTML cmets 来隐藏您的 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>
            

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

            【讨论】:

              猜你喜欢
              • 2011-11-23
              • 2010-09-15
              • 1970-01-01
              • 2012-04-26
              • 2011-12-13
              • 2012-05-31
              • 2014-04-01
              • 2011-03-03
              • 2011-10-23
              相关资源
              最近更新 更多