4

与えられたコード(それは有効であるはずです):

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

W3Cバリデーターは適合をスローします:

  • コメント宣言のSセパレータ
  • 無効なコメント宣言:コメントの外側にあるがコメントの宣言の内側に名前の開始文字が見つかりました
  • ここでは文字データは許可されていません

などなど

何が起こっているのか完全にはわかりません。それは「ネストされた」コメントですか?タグはZendFrameworkViewhelperheadStyleによって生成されています

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

6 に答える 6

7

有効なXML/XHTMLで終わる--部分でない限り、コメントの内部を含めることはできません。-->コメントが機能する方法。

このソースから:

互換性のために、文字列「-」(ダブルハイフン)をコメント内に配置してはなりません(MUSTNOT)。

ブラウザを区別するためのより標準的な方法を見つける必要があります(または、より理想的には、ブラウザをまったく区別する必要のないレイアウトを使用する必要があります)。

于 2009-06-04T16:23:14.700 に答える
6

" -->" はすべてのコメントを閉じます。コメントを互いに入れ子にするという概念はありません。したがって、コードでは、最初の " -->" が両方のコメントを閉じます。次に、<![endif]-->は完全にコメントの外側にあるため、意味がありません。

于 2009-06-04T16:25:00.457 に答える
2

ネストされたコメントです。それらは許可されていません。

于 2009-06-04T16:25:24.450 に答える
0

Phil Boothの回答は、HTML コメントの構文が正しくないという点で正しいです。HTML コメントはネストできません。とはいえ、もう一歩踏み出したい…。

CSS または JavaScript を XHTML 検証から隠すために、HTML コメントを使用しないでください。代わりに、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 に答える
0

...そして、なぜ内容全体をコメントアウトするの<style>ですか? それを表示するのに十分なほど愚かなブラウザ用にコーディングしているわけではありません。(コマンドライン ブラウザでさえ、スタイル/スクリプト ブロックを非表示にします。)

編集:ああ、待ってください。これは Zend によって生成されます。

于 2009-06-04T17:07:47.420 に答える