5

タグ省略のHTML5仕様(http://www.w3.org/TR/html51/syntax.html#syntax-tag-omission)は、次の2つのステートメントで始まります(私の強調)。

  • html要素内の最初のものが コメントでない場合は、html要素の開始タグを省略できます。
  • html要素の直後にコメントがない場合は、html要素の終了タグを省略できます 。

それらのステートメントは同じように読まれますが、同じではありません。誰かがそれらの意味を明確にすることができるかどうか疑問に思います。

次の場合は明確に見えます。開始タグまたは終了タグを削除することはできません。

<html><!-- start --> ... </html><!-- end -->

しかし、空白がミックスに導入された場合はどうでしょうか。次の場合、の開始タグをhtml削除できますか?

<html>
   <!-- comment after whitespace -->
   ...

同様のシナリオで終了タグを削除できますか?

   ...
</html>
<!-- comment after whitespace -->

他のルールのいくつかは、空白文字について具体的に言及しているため、それらを考慮に入れる必要があると私は信じています。ほとんどのルールは「...直後に...」と言っていますが、これは最初にリストされている箇条書きとは異なります。

4

3 に答える 3

2

HTMLでは、タグ間のスペースは重要ではありません。<html> <head><html><head>ブラウザに同じことです。コンテンツ(たとえば、span / pタグ内の単語間)では、ブラウザーによってレンダリングされますが、要素間のスペースを(設計リソースとして)使用する場合は、&nbspを使用する必要があります。

ですから、私が見るように、直後に続くのは「次の文字」を意味するのではなく、「それらの間にいくつのスペースがあっても、終了タグが置かれるはずだった場所の後の最初のもの」を意味します。

次に、どちらの場合もhtmlタグを削除すると、その場所とコメントの間にいくつのスペースがあっても、htmlが無効に</html>なります。

編集:彼らは別の言葉を使って同じことを表現しようとしていて、繰り返しを避けようとしていたと思いますが、混乱してしまいました。

于 2013-02-20T21:50:21.683 に答える
2

ここで重要な要素は、内部の最初のフレーズとその直後のフレーズがノード、つまりタグやその他のマークアップではなくDOMについて話していることです。したがって、ノードが子(内部の最初のもの)であるか後続であるかが区別されます。兄弟(直後に続く)。

スペースに関する限り:

html要素内の最初のものがコメントでない場合は、html要素の開始タグを省略できます。

パーサーアルゴリズムのその時点で、スペース文字トークンは破棄され、DOMに追加されないため、html要素内の最初のものをスペース文字にすることはできません。

html要素の直後にコメントがない場合は、html要素の終了タグを省略できます。

スペース文字は、タグの直前または直後に表示されるかどうかに関係なく</html>、html要素内(実際にはbody要素内にも)で終わるため、スペースがあるかどうかに関係なく、コメントはhtml要素の直後になります。マークアップの間に。

于 2013-02-20T21:54:03.713 に答える
1

タグの省略に関する規則は、ほとんどの場合、タグをいつ省略できるかを実際に言っているのではなく、タグを省略したときにどのように解釈すべきかを示しているという点で、やや誤解を招きます。たとえば、次のドキュメントを見てください。

<!DOCTYPE html><!-- A comment --><title>A title</title>

これは有効なHTML5です。W3Cバリデーターを介して自分で実行できます。しかし、タグ省略規則は明確に次のように述べています

[a] n要素内の最初のものがコメントでないhtml場合、要素の開始タグは省略できます。html

これをどのように調整しますか?答えは、これらは曖昧性解消のルールであるということです。要素内の最初のものがコメントである場合、html要素の開始タグは省略できないため、解析時にコメントが要素内の最初のものではないと想定することができます。html同様に、タグ省略ルールには次のように記載されています。

[a]body要素が空の場合、またはbody要素内の最初のものがスペース文字またはコメントでない場合、要素の開始タグは省略できます[...]

したがって、コメントも要素内の最初のものではないと想定することができます。bodyしたがって、実際には、このドキュメントは次のように明確に解析できます。

<!DOCTYPE html><!-- A comment --><html><head><title>A title</title></head><body></body></html>

HTML5のパーサーアルゴリズムは、HTML挿入前モードにある場合、パーサーが<!DOCTYPE html>を表示した後に遷移する状態であると指定します。

U + 0009 CHARACTER TABULATION、 "LF"(U + 000A)、 "FF"(U + 000C)、 "CR"(U + 000D)、またはU+0020スペースのいずれかである文字トークン

次に、「トークンを無視する」必要があります。一方、コメントトークンが表示された場合は、

Documentオブジェクトの最後の子としてコメントを挿入します。

html要素を放出するのは、他の種類のタグが表示されるまではありません。したがって、この動作は空白の影響を受けないことを期待する必要があります。実際、Firefox54とChrome60の両方がドキュメントを解釈します。

<!DOCTYPE html>
         <!-- A comment -->
    <title>A title</title>

と同じように

<!DOCTYPE html><!-- A comment --><title>A title</title>

つまり、両方とも次のように扱われます

<!DOCTYPE html><!-- A comment --><html><head><title>A title</title></head><body></body></html>
于 2017-08-01T21:21:09.067 に答える