条件注释和有效的XHTML

时间:2009-06-04 16:19:53

标签: html zend-framework xhtml conditional-comments

鉴于代码(看起来应该有效):

<!--[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')
                                );

6 个答案:

答案 0 :(得分:7)

除非--以有效的XML / XHTML结尾,否则您不能在评论中添加-->。就是评论工作的方式。

来自this source

  

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

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

...为什么要评论<style>的全部内容?这并不是说您编写的浏览器足以显示它。 (甚至命令行浏览器也会隐藏样式/脚本块。)

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

答案 4 :(得分:0)

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

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

这些文章详细介绍了为什么上述解决方案是正确的解决方案: