1. ホーム
  2. html

[解決済み] HTML5でHTMLコメントの標準が変わる?

2022-07-09 03:53:28

質問

最近、HTML5で新しいコメントの仕方があることを知りました。

典型的な <!-- --> という複数行のコメントで、私は と思った 私は、私の IDE が通常の <!div > をコメントアウトしていました。そこでテストしてみたところ、なんとChromeがそのタグをコメントアウトしていたのです。それは だけ がコメントアウトされ、div のコンテンツはコメントアウトされなかったので、近い方の <!/div> をコメントアウトして、他のdivを閉じないようにする必要がありました。

もう一つテストしてみたところ、一般的に任意のタグの冒頭の前にエクスクラメーションマークを付けると、この記号 < という記号を付けると、そのタグはコメントアウトされるようです。

これは実際に新しいことなのでしょうか?悪い習慣なのでしょうか?とても便利なのですが、実用的なのでしょうか?

詳細の編集。 構文エラーやこの特定の構文の誤認は正当な理由ですが、なぜChromeは は実際に は完全なコメントとしてそれらをレンダリングするのでしょうか?

というコードが書かれています。 :

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

とレンダリングされます。 :

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

どのように解決するのですか?

HTML5 にはコメントに関する新しい規格はありません。唯一の有効なコメント構文は、依然として <!-- --> . から W3C HTML5 の 8.1.6 節を参照してください。 :

<ブロッククオート

コメント は、U+003C LESS-THAN SIGN, U+0021 EXCLAMATION MARK, U+002D HYPHEN-MINUS, U+002D HYPHEN-MINUS の4文字のシーケンスで開始しなければならない ( <!-- ).

<! 構文は SGML DTD マークアップに由来するもので、HTML5 の一部ではありません。HTML5では、コメント、CDATAセクション、およびDOCTYPE宣言のために予約されています。したがって、この代替案がバッドプラクティスであるかどうかは、時代遅れのマークアップの使用 (またはより悪いことに依存) をバッドプラクティスであると考えるかどうかに依存します。

Validator.nu は、あなたが持っているものを "Bogus comment." と呼びます - これは、有効なコメントでないにもかかわらず、コメントのように扱われることを意味します。これはおそらく、SGML ベースで、次のような形式のマークアップ宣言があった HTML5 以前との後方互換性のためだと思われます。 <!FOO> という形でマークアップ宣言をしていたので、これは新しいとは言えません。それらが扱われる理由は のように コメントのように扱われるのは、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文字が単語"DOCTYPE"のASCII大文字小文字を区別しないマッチであれば、それらの文字を消費し、DOCTYPE状態に切り替わります。

    そうでなければ、調整された現在のノードがあり、それがHTML名前空間の要素でなく、次の7文字が文字列"[CDATA]"(前後にU+005B LEFT SQUARE BRACKET文字を持つ5つの大文字の"CDATA")に対するケースセンシティブマッチの場合、これらの文字を消費してCDATAセクション状態に切り替わります。

    そうでなければ、これはパースエラーです。インチキコメント状態に切り替えます。次に消費される文字があれば、それがコメント内の最初の文字となります。

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

  4. 8.2.4.44 偽装コメント状態 :

    最初の ">" (U+003E) 文字またはファイルの終わり (EOF) のどちらか先に来るまでのすべての文字を消費します。そのデータは、ステートマシンが偽のコメント状態に移行する原因となった文字から始まり、最後に消費された文字の直前の文字まで(つまり、U+003E または EOF 文字の直前の文字まで)のすべての文字を連結したコメント トークンを出力します。(コメントがファイルの終わり(EOF)から始まっていた場合、トークンは空になります。同様に、トークンが文字列 " で生成された場合は、空です。 <!> という文字列で生成された場合、トークンは空になります)。

    わかりやすく言うと、これが転じて <!div displayed><!--div displayed--><!/div><!--/div--> に変換します。

最後に、おそらく他の HTML5 準拠のパーサーも Chrome と同じ動作をすることが予想されます。