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


131

最近、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-->

19
多くの場合、それは単に構文エラーおよび/または無意味なタグであり、したがって無視されます。
だます

@decezeブラウザーは、それほど厳密でない規則に従ってHTMLをレンダリングする方法に寛容になる可能性があるため、多少は期待していました。
Andrew

1
@ Lemony-AndrewどんなIDEですか?選択された回答によると、これを問題として報告できます(またはオープンソースの場合は修正できます)。
デレクソン、2015

1
@Derecksonit私の目が私をだましていないことを確認するために公式の回答がなされた後、私は自分のIDEを再確認しました。たまたま実際にはコメントアウトされていなかったのですが、似たような通常のテキストの色でした。これはすべて偶然でした。
アンドリュー

回答:


196

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

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

<!HTML5の一部ではないSGML DTDマークアップ、中構文の発信元。HTML5では、コメント、CDATAセクション、およびDOCTYPE宣言のために予約されています。したがって、この代替手段が悪い習慣であるかどうかは、廃止されたマークアップの使用(さらに悪いことに、依存性)を悪い習慣であると考えるかどうかに依存します。

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

セクション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 +が付いた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と同じように動作することを期待できます。


11
この事件の背後にある公式の推論を見つけるために時間を割いていただきありがとうございます。それはかなり物事を明確にし、私の間違った仮定に多くの正当性を与えます。
Andrew

2
HTML5仕様に「無効な」コンテンツを処理するためのルールがあるのは奇妙です。無効な場合は、まったく処理されません。
Arturo TorresSánchez2015

2
まあ、それがHTMLとWeb言語がかつてそうだった方法です-厳密です。不適切なコード構造が処理される理由は、寛容にサイトの品質を向上させるためです。ブラウザーが表示できるWebサイトが多くなり、間違った構文で正しく表示されるほど、エンドユーザーの満足度は高くなります。一般的なWeb標準の作成者(主に他のWeb標準ではないw3)は、ブラウザーベンダーがこのためガイドラインに従っていないことに気付きました。HTML5が登場し、デザインをよりゆるやかにするという考えにのみ基づいて構築されました。
Andrew

3
@ArturoTorresSánchez:XHTMLは「無効なコンテンツ=エラー」のアプローチを試み、無残に失敗しました。さらに、ルールは基本的に「この偽のコメントを解析せず、コメントとして扱い、次に見つかった有効なものを解析する」と述べています。ですから、あなたの見方によっては、HTML5は望みどおりの結果を出せないか、HTML5が望みどおりの結果を出すかということになります。
slebetman

1
@ArturoTorresSánchez:歴史的に、HTMLサーバーはあらゆる種類のブラウザーに同じ文字シーケンスを提供することを期待していました。古いパーサーが「オプションの」新しい機能を使用するドキュメントを区別できるようにドキュメント形式を設計することは可能ですが、古いパーサーは無視する必要があります。それらをサポートすること、そして単なる無効な文書であること、そのようなことはその形成年の間HTMLで行われていませんでした。
スーパーキャット2015

12

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

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


それ本当かもしれませんが、Chromeがこれらのタグを実際にコメントアウトさせているのはなぜですか?
Andrew

4
提案(わからない、推測するだけ):解釈しようとする>できない>コメント付き?
Yves Lange

それは私には十分合理的に思えます。
アンドリュー

繰り返しますが(申し訳ありません)、これは単なる想定であることに注意してください。
Yves Lange
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.