web-dev-qa-db-ja.com

HTML5はHTMLコメントの標準を変更しますか?

最近、HTML5に新しいコメント方法が存在する可能性があることを発見しました。

私が読んだ典型的な<!-- -->複数行コメントの代わりに、私はthought私のIDE定期的に<!div >をコメントアウトしたので、テストしましたが、驚いたことにChromeはそのタグをコメントアウトしました。それ onlyはdivのコンテンツではなくタグをコメントアウトしたので、他のdivを閉じないようにするために、より近い<!/div>をコメントアウトする必要がありました。

別のテストを行ったところ、通常、タグの開始点の前に感嘆符を置くと、このシンボル<がそのタグをコメントアウトするようです。

これは実際に新しいですか?それは悪い習慣ですか?それは実際には非常に便利ですが、まだ実用的ですか?

追加の詳細を編集:構文エラーまたはこの特定の構文の誤った解釈は正当な理由ですが、どうしてChrome実際に完全なコメントとして表示しますか?

コードは次のように記述されています

<!div displayed> some text here that is still displayed <!/div>

そしてそれは次のようにレンダリングされます

<!--div displayed--> some text here that is still displayed <!--/div-->
130
Andrew

HTML5にはコメントの新しい標準はありません。有効なコメント構文はまだ<!-- -->のみです。 W3C HTML5のセクション8.1.6 から:

コメントは、4文字のシーケンスU + 003C LESS-THAN SIGN、U + 0021 EXCLAMATION MARK、U + 002D HYPHEN-MINUS、U + 002Dで始まる必要がありますハイフンマイナス(<!--)。

<!構文は、HTML5の一部ではないSGML DTDマークアップに由来します。 HTML5では、コメント、CDATAセクション、およびDOCTYPE宣言用に予約されています。したがって、この代替案が悪い慣行であるかどうかは、廃止されたマークアップの使用を悪い慣行と見なすかどうかに依存します。

Validator.nuは、あなたが「偽のコメント」を持っているものを呼び出します。 —つまり、有効なコメントではないにもかかわらず、コメントのように扱われます。これはおそらく、SGMLベースのHTML5以前との後方互換性のためであり、<!FOO>という形式のマークアップ宣言があったため、これを新しいものとは呼びません。コメントが扱われるlikeコメントは、SGMLマークアップ宣言がレンダリングを意図していない特別な宣言であるためですが、HTML5では(上記の例外を除いて)無意味であるためですHTML5 DOMが懸念しているので、それらはコメントにすぎません。

セクション8.2.4 内の次の手順は、この結論につながります。この結論は、Chromeは文字の後に続くようです。

  1. 8.2.4.1データ状態

    次の入力文字を消費します。

    "<"(U + 003C)
    タグを開いた状態に切り替えます。

  2. 8.2.4.8タグのオープン状態

    次の入力文字を消費します。

    "!" (U + 0021)
    マークアップ宣言のオープン状態に切り替えます。

  3. 8.2.4.45マークアップ宣言のオープン状態

    次の2文字が両方とも「-」(U + 002D)文字である場合、それら2文字を消費し、データが空の文字列であるコメントトークンを作成し、コメント開始状態に切り替えます。

    それ以外の場合、次の7文字がWord "DOCTYPE"の大文字と小文字を区別しないASCIIである場合)、それらの文字を消費してDOCTYPE状態に切り替えます。

    それ以外の場合、調整された現在のノードがあり、それがHTML名前空間の要素でなく、次の7文字が文字列「[CDATA [」(U +の5つの大文字「CDATA」 005B LEFT SQUARE BRACKET文字の前後)、それらの文字を消費し、CDATAセクション状態に切り替えます。

    それ以外の場合、これは解析エラーです。偽のコメント状態に切り替えます。消費される次の文字は、もしあれば、コメントに含まれる最初の文字です。

    検出された文字のシーケンスが<!--である場合にのみコメント開始状態に切り替えるように指示されていることに注意してください。それ以外の場合は偽のコメントです。これは、上記のセクション8.1.6で述べられていることを反映しています。

  4. 8.2.4.44偽のコメント状態

    最初の ">"(U + 003E)文字またはファイルの終わり(EOF)のいずれか早い方までのすべての文字を使用します。ステートマシンが偽のコメント状態に切り替わる原因となった文字を含む、最後の消費文字の直前の文字(つまり、文字まで)を含むすべての文字の連結がデータであるコメントトークンを発行しますU + 003EまたはEOF文字)の直前、ただしU + 0000 NULL文字はU + FFFD REPLACEMENT CHARACTER文字に置き換えられます(コメントがファイルの終わりまでに開始された場合( EOF)、トークンは空です。同様に、トークンが文字列「<!>」によって生成された場合、トークンは空です。

    簡単な英語では、これは、質問で説明されているとおり、<!div displayed><!--div displayed-->に、<!/div><!--/div-->に変換します。

最後に、他のHTML5準拠のパーサーがChromeと同じように動作することを期待できます。

195
BoltClock

<!<!DOCTYPEのようなマークアップ宣言の略であるため、これは良い習慣ではないと思います。したがって、あなたはそれがコメントされていると思います(まあ...ブラウザはそれを解釈しようとします)。

表示されない場合でも、これはHTMLコードをコメントするための正しい構文ではないようです。

12
Yves Lange