条件注释和有效的 XHTML

发布于 2024-07-23 08:38:53 字数 620 浏览 8 评论 0原文

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

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

W3C 验证器抛出一个 fit:

  • S 分隔符在注释声明中
  • 注释声明
  • 无效注释声明:在注释外部找到名称起始字符,但此处不允许

字符数据等等

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

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

Given the code (which looks like it should be valid):

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

The W3C validator throws a fit:

  • S separator in comment declaration
  • invalid comment declaration: found name start character outside comment but inside comment declaration
  • character data is not allowed here

etc etc

I'm not totally sure whats going on. Is it the 'nested' comments? The tag is being generated by the Zend Framework Viewhelper headStyle

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

宣告ˉ结束 2024-07-30 08:38:54

注释中不能包含 --,除非它是以有效 XML/XHTML 结尾的 --> 的一部分。 这就是评论的工作方式。

来自此来源

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

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

You can't have a -- inside of a comment unless it's part of the --> ending in valid XML/XHTML. Just the way comments work.

From this source:

For Compatibility, the string "--" (double-hyphen) MUST NOT occur within comments.

You should find a more standard way to differentiate between browsers (or, more ideally, have a layout that doesn't require differentiation between browsers at all).

超可爱的懒熊 2024-07-30 08:38:54

-->”关闭任何注释,不存在相互嵌套注释的概念。 因此,在您的代码中,第一个“-->”会关闭您的两条注释。 那么 完全在任何注释之外,所以没有任何意义。

"-->" closes any comment, there is no notion of nesting comments inside each other. So in your code, the first "-->" closes both of your comments. Then the <![endif]--> is completely outside of any comments, so doesn't make any sense.

抚笙 2024-07-30 08:38:54

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

It is the nested comments. They are not allowed.

木落 2024-07-30 08:38:54

...为什么要注释掉

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

...and why comment out the entire contents of <style>? It's not as if you're coding for a browser that is dumb enough to display it. (Even command-line browsers hide the style/script blocks.)

Edit: Ah, wait. That's generated by Zend.

自在安然 2024-07-30 08:38:54

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

You should post new issue on issue tracker. It's a good way to make such mistakes corrected.
http://framework.zend.com/issues/secure/Dashboard.jspa

嗼ふ静 2024-07-30 08:38:54

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>

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

The answer given by Phil Booth is correct in that your HTML comment syntax is incorrect; HTML comments cannot be nested. However, I'd like to take it a step further...

You should not use HTML comments to hide your CSS or JavaScript from XHTML validation. Instead, you should use CDATA tags. This is the most universal solution, supporting pretty much every browser and browser version new and old.

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

These articles go into more detail about why the aforementioned solution is the correct one:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文