【漂遊HTML】終了タグの省略で空の
要素が生成されるのはなぜ?仕様の仕組みを解説
はじめに
HTMLを記述していると、終了タグ(</p>)を書き忘れたり、対応する開始タグが存在しない場所に終了タグだけが現れたりした際に、ブラウザが「空の段落」を自動的に生成することがあります。一見不思議なこの挙動には、HTMLの仕様に基づいた明確な理由があります。本記事では、公式ドキュメント・DTD・SGML宣言という3つの観点から、その仕組みをわかりやすく解説します。
公式ドキュメントが定めるルール
HTMLの公式ドキュメントによれば、終了タグ </p> が文書内の既存の <p> 要素と対応付けられない場合には、新たに <p> 要素を作成しなければならないとされています。つまり、対応する開始タグを持たない孤立した終了タグが出現すると、パーサーは空の段落要素を挿入し、文書構造の整合性を保とうとするのです。これが「空の段落」が生成される直接的な原因です。
HTML4 DTDにおけるタグの省略規則
HTML4のDTD(Document Type Definition/文書型定義)では、p要素に関して次のように定められています。
- 終了タグ </p> は省略可能(オプション)
- 開始タグ <p> は必須
このため、多くのブラウザは後続のブロック要素の出現などを手がかりに段落の終わりを推測し、明示的な </p> がなくても段落を適切に閉じることができます。
SGML宣言とOMITTAGの役割
さらに重要なのが、HTML4のSGML宣言における「OMITTAG YES」という指定です。これはSGMLの機能として、タグの省略を許可することを意味します。DTD側の要素宣言と組み合わせることで、実際にどのタグが省略できるのかが決まります。
HTML4の場合、p要素で省略できるのは終了タグのみですが、SGMLの仕組み上は開始タグも暗示(implied)できる可能性があります。そのため、パーサーの実装やマークアップの書き方によっては、開発者の意図しない空の要素が生成されるケースが生じるのです。
まとめ
空の段落が生成されるのは、HTMLの仕様が「対応関係のない終了タグ」に対して新しい <p> 要素の作成を求めているためです。加えて、HTML4ではp要素の終了タグの省略が認められ、SGML宣言のOMITTAG YESによってタグ省略の枠組み自体が用意されている点も、この挙動を理解するうえで重要なポイントです。
意図しない空の段落によるレイアウト崩れを防ぐためには、開始タグと終了タグを必ず対で記述することを心がけましょう。
-
HTMLのdlタグとは?記述リストの作成方法をサンプルコード付きで解説
HTMLのdlタグとは HTMLの<dl>要素は、記述リスト(description list)を定義するために使用されるタグです。HTML5では<dl>は「記述リスト」を表しますが、HTML4では「定義リスト(definition list)」として扱われていました。この違いを理解しておくと、より適切なマークアップができるようになります。 記述リストは、用語とその説明をセットで表示したい場合に便利な要素で、用語集、FAQ、メタデータの表示など、さまざまな場面で活用できます。 dlタグの基本構造 <dl>タグは、以下の2つの要素と組み合わせて使用します。
-
HTMLのembedタグとは?使い方と主な属性をわかりやすく解説
<embed>タグとは<embed>タグは、HTML文書の中に外部アプリケーションやプラグインコンテンツ(PDFファイル、動画、音声など)を埋め込むための要素です。開始タグのみで構成され、基本的に終了タグは不要です。<embed>タグで使用できる主な属性は以下の通りです。height:埋め込むコンテンツの高さをピクセル単位で指定します。src:埋め込む外部ファイルのアドレス(URL)を指定します。type:埋め込みコンテンツのメディアタイプ(MIMEタイプ)を指定します。例:「application/pdf」など。width:埋め込むコンテンツの幅をピクセル