どうやら、要素</p>
内に一致する開始タグがない終了タグがあるbody
場合、すべてではないにしてもほとんどのブラウザーがその場所に空の段落を生成します。
<!DOCTYPE html>
<title></title>
<body>
</p>
</body>
終了タグの周りにテキストが存在する場合でも、このp
要素の一部にはなりません — 常に空であり、テキスト ノードは常に単独で存在します。
<!DOCTYPE html>
<title></title>
<body>
some text</p>more text
</body>
の上記の内容がbody
と タグで囲まれている<p>
場合</p>
...どうなるかはあなたにお任せします:
<!DOCTYPE html>
<title></title>
<body>
<p>some text</p>more text</p>
</body>
興味深いことに、タグの</p>
前に<body>
or</body>
タグがない場合、IE9 以前を除くすべてのブラウザーは空の段落を生成しません(一方、IE ≤ 9 では常に空の段落が作成されますが、IE10 以降は他のすべてのブラウザーと同じように動作します)。 :
<!DOCTYPE html>
<title></title>
</p>
<!DOCTYPE html>
<title></title>
</p><body>
<!DOCTYPE html>
<title></title>
</p></body>
対応する開始タグのない終了タグが空の要素を生成する必要があることを規定する参照は見つかりませんが、そもそも有効な HTML でさえないことを考えると、驚くべきことではありません。p
実際、ブラウザーが要素 (およびある程度要素も!)を使用してこれを行うことはわかっていますが、br
その理由についての説明はありません。
ただし、従来の HTML パーサーと HTML5 パーサーの両方を使用するブラウザー間で一貫性があり、quirks モードと標準モードの両方に適用されます。したがって、これは初期の仕様または従来の動作との下位互換性のためであると推測するのはおそらく公正です。
実際、多少関連する質問への回答でこのコメントを見つけました。これは基本的にそれを確認します。
<p> タグが閉じられていない場合に有効である理由は、もともと <p> がコンテナー要素ではなく、"新しい段落" マーカーとして定義されていたためです。<br> が「改行」マーカーであることと同等です。1992年のこのドキュメントでそのように定義されていることがわかります。 org/MarkUp/draft-ietf-iiir-html-01.txt変更前の Web ページがあり、ブラウザ パーサーは常に既存の Web コンテンツと可能な限り下位互換性を保っていたため、常に <p> を使用できます。その方法。
</p>
しかし、パーサーが明示的な終了タグ (スラッシュ付き) を単純に... タグとして扱い、DOM に空の要素を生成する理由を完全には説明していません。これは、構文が最近ほど 厳密に定義されていなかったときからのパーサーエラー処理規則の一部ですか? もしそうなら、それはどこかに文書化されていますか?