要素の包含関係
トップ > HTMLリファレンス > HTML概要 > 要素の包含関係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 の子要素や孫要素としてどこでも記述することができます。ある時はブロック要素として、ある時はインライン要素として振舞います。ただし、インライン要素としてふるまっている時は、内部にブロック要素を包含することができません。
INPUT や TEXTAREA などのフォーム部品は仕様上、FORM の外にもかけますが、Netscape Communicator では、必ず FORM の中に書かないと表示されません。