HTML4.01 における要素の包含関係

トップ > HTMLリファレンス > HTML概要 > HTML4.01 における要素の包含関係

HTML4.01 の要素の包含関係

このページでは、HTML4.01 の要素の包含関係について説明します。HTML5 では概念ががらりと変わっているので、そちらを参照してください。

HTML4.01 の仕様書では、HTML の各要素は次のような包含関係を持つと定義されています。

 html

 <!-- ヘッダ -->
├□ head
│├○ base | meta | link
│├○ isindex(strict では不可)
│├□ title | script | style
││└◇ 文字
│└□ object
│ └○ param

 <!-- ボディ -->
├□ body
│├◇ ブロック要素
│├◇ インライン要素(strict では不可)
│├□ script
││└◇ 文字
│└□ ins | del(孫要素として登場してよい)
│ └◇ ブロック要素 | インライン要素

 <!-- フレーム -->
└□ frameset(frameset の場合のみ)
 ├□ frameset
 ├○ frame
 └□ noframes
  └□ body(noframes を含んではならない)

これは、html要素(<html>~</html>)はその中に head要素(<head>~</head>)、body要素(<body>~</body>)や frameset要素(<frameset>~</frameset>)を包含することができることを意味します。正確には、head要素は1回のみ先頭に、body と frameset はどちらか一方のみなど、細かな規定があるのですが、ここでは省略します。

aaa | bbb は 「aaa または bbb」 を意味します。□ は子要素や内容を含むことができる要素、○ は終了タグの無い要素、◇ はその他を示しています。

ブロック要素

ブロック要素は通常、前後が改行された形式で表示されます。

 ブロック要素

├○ hr
├□ h1 | h2 | h3 | h4 | h5 | h6 | p
│└◇ インライン要素
├□ div
│└◇ ブロック要素 | インライン要素
├□ center(strict では不可)
│└◇ ブロック要素 | インライン要素
├□ pre
│└◇ インライン要素(img|object|applet|big|small|
     sub|sup|font|basefont を含んではならない)
├□ blockquote
│├□ script
││└◇ 文字
│├◇ インライン要素(strict では不可)
│└◇ ブロック要素
├□ address
│├□ p(strict では不可)
││└◇ インライン要素
│└◇ インライン要素
├□ noscript
│├◇ インライン要素(strict では不可)
│└◇ ブロック要素
├□ noframes(strict では不可)
│└◇ ブロック要素 | インライン要素

<!-- リスト系 -->
├□ ul | ol
│└□ li
│ └◇ ブロック要素 | インライン要素
├□ dir | menu(strict では不可)
│└□ li
│ └◇ インライン要素
├□ dl
│├□ dt
││└◇ インライン要素
│└□ dd
│ └◇ ブロック要素 | インライン要素

<!-- テーブル系 -->
├□ table
│├□ caption
││└◇ インライン要素
│├○ col
│├□ colgroup
││└○ col
│└□ thead | tbody | tfoot
│ └□ tr
│  └□ th | td
│   └◇ ブロック要素 | インライン要素

<!-- フォーム系 -->
├□ form
│├□ script
││└◇ 文字
│├◇ インライン要素(strict では不可)
│└◇ ブロック要素(form を含んではならない)
└□ fieldset
 ├◇ 文字
 ├□ legend(必須)
 │└◇ インライン要素
 └◇ ブロック要素 | インライン要素

インライン要素

インライン要素は通常、前後に改行がはいることなく表示されます。

 インライン要素
├○ br | img
├□ iframe(strict では不可)
│└◇ ブロック要素 | インライン要素
├□ a
│└◇ インライン要素(a を含んではならない)
├□ map
│├◇ ブロック要素
│└○ area

<!-- 文字・フォント系 -->
├◇ 文字
├□ font(strict では不可)
│└◇ インライン要素
├○ basefont(strict では不可)
├□ tt | i | b | big | small |
││ em | string | dfn | code | samp | kbd |
││ var | cite | abbr | acronym |
││ sub | sup | span | bdo | q
│└◇ インライン要素

<!--  埋めこみ系 -->
├□ script
│└◇ 文字
├□ applet(strict では不可)
│├○ param
│└◇ ブロック要素 | インライン要素
├□ object
│├○ param
│└◇ ブロック要素 | インライン要素

<!-- フォーム系 -->
├□ label
│└◇ インライン要素(label を含んではならない)
├○ input
├□ select
│├□ optgroup
││└□ option
││ └◇ #pcdata
│└□ option
│ └◇ #pcdata
├□ textarea
│└◇ #pcdata
└□ button
 └◇ ブロック要素 | インライン要素
  (a|form|fieldset|input|select|textarea|label|button|
   isindex|iframe を含んではならない)

補足説明

HTML4.01 Strict の仕様に従う場合、body要素の直下にインライン要素を記述することができません。従って、文字や、画像などのインライン要素を記述する場合は、必ず何かのブロック要素で囲って記述する必要があります。html4.01 transitional の場合は、インライン要素を直接記述することができます。

table の直下には tr を包含できません。ただし、tbody は開始タグも終了タグも省略可能なので、直下に tr を記述した場合は <tbody>~</tbody> が省略されていると見なされます。

ins と del は body の子要素や孫要素としてどこでも記述することができます。ある時はブロック要素として、ある時はインライン要素として振舞います。ただし、インライン要素としてふるまっている時は、内部にブロック要素を包含することができません。


Copyright (C) 2001-2015 杜甫々
初版:2001年11月24日 最終更新:2015年1月3日
http://www.tohoho-web.com/html/memo/elmtree.htm