Section 15 で要素はそれぞれその中に書ける内容が決まっていると述べた。ここでは,今まで出てきた <BODY> に書かれる要素について,それぞれその内容とできるものをまとめておく。
“ここから〜ここまで”のかたちのインライン要素の多くは,その内容としてインライン要素をとる。それぞれについて見てみよう。
<TT>,<I>,<B>,<BIG>,<SMALL> はいずれも,インライン要素を内容としてとる。
<EM>,<STRONG>,<DFN>,<CODE>,<SMAP>,<KBD>,<VAR>,<CITE>,<ABBR>,<ACRONYM> はいずれも,インライン要素を内容とする。
<SUB>,<SUP>,<SPAN>,<Q> はいずれも,インライン要素を内容とする。
<A> はインライン要素を内容とするが,<A> を含んではならない。
<SCRIPT> の内容はスクリプトである。スクリプト対応ブラウザは <SCRIPT>...</SCRIPT> に書かれたものは表示させない。
<OBJECT> は代替として表示されるものにインライン要素,ブロック要素を含んでもよい。また,<PARAM> も内容として含んでよい。
<P>,<Hn>,<ADDRESS> はインライン要素をその内容とする。<Hn> は,見出しの“ブロック”を示す要素であって,“文字を大きくする”意味はどこにも含まれていない。だが,
<H1>
<P>ぼくは,大きい文字が大好きです。
...
</H1>
と書く HTML をいまだに見かける。<Hn> は見出しを作るもので,見出しの重要さをブラウザがたまたま文字の大きさで表現しているにすぎないのである。文字の大きさなんて,スタイルシートでどうにでもなってしまう。
<BLOCKQUOTE> の内容はブロック要素と <SCRIPT> で,これ以外のインライン要素は含まれない。したがって,<BLOCKQUOTE> の直下には <P> のようなインライン要素を書ける要素を入れて,そこに文章を書いていくのである。<BLOCKQUOTE> 中は空ではいけない。
<DIV> はブロック要素,インライン要素のいずれも内容としてとることができる。
<UL>,<OL> の内容は <LI> のみで,空ではいけない。<UL>,<OL> の直下には段落を作ったり,直接文字を書いてはならない。<LI> はブロック要素,インライン要素のいずれも含んでよい。
<DL> はその内容として <DT>,<DD> のみをとる。空ではいけない。念のために補足しておくと,<DL> の直下に文章を書いてはいけない(インデントだと勘違いするのはそろそろなくならないものだろうか)。<DT> の内容はインライン要素のみで,<DD> はブロック要素,インライン要素いずれもとってよい。<DT> は“語”,<DD> が“その定義”ということを考えると納得がいくはずだ。
<TABLE> の内容には順序がある。
まず <CAPTION>。これはなくてもよいが,2 つ以上あってはならない。
次は <COL> または <COLGROUP> のどちらか。つまり,<COL> だけで列を定義するか,<COLGROUP> で列をグループ化するかいずれかである。したがって,次のような使い方は間違いである。
<COLGROUP><COL SPAN="2" ALIGN="center"><COL></COLGROUP><COL SPAN="3">
いったん <COLGROUP> を使い始めたら,その外に <COL> を書いてはならない。逆に,いったん <COLGROUP> の外に <COL> を書き始めたら列のグループ化は行ってはならない。
次は,<THEAD>,<TFOOT>,<TBODY> の順で行グループを書く。<THEAD>,<TFOOT> はなくてもよいが,2 つ以上あってもいけない。<TBODY> は 1 つ以上なくてはならない。行のグループ化を行わない場合,全体を 1 つの <TBODY> に含める。
以上が <TABLE> の内容。
<CAPTION> はインライン要素を内容とする。
<COLGROUP> の内容は <COL> のみ。
<THEAD>,<TFOOT>,<TBODY> の内容はいずれも <TR> のみで,空ではいけない。
<TR> の内容は <TD>,<TH> のみで,空ではいけない。
<TD>,<TH> の内容はブロック要素またはインライン要素で,ここでやっと文字を書くことができる。逆に言うと,<TABLE> を書いたら,<CAPTION>,<TD>,<TH> が出てくるまで,内容はかなり制限され,文章などを書くことはできない。
<PRE> の内容はインライン要素であるが,整形済みテキストの意味がなくなるような要素,<IMG>,<OBJECT>,<BIG>,<SMALL>,<SUB>,<SUP> は除かれる。
<NOSCRIPT> の内容はブロック要素で,空ではいけない。
<BODY> の内容はブロック要素または <SCRIPT> で,空ではいけない。さらに,これに加えて,文書の変更を記述する <INS>,<DEL> を本文内随所に(直下でなくでも)書くことができる。
これを覚えるのはいささか大変だが,要素の内容のルールを破った場合,ブラウザの出力は保証されない(プログラムでは,エラーが出る状況と同じなのであるから!)。変な表示になってしまったら,明らかに書いた人間の責任である。もっとも,文書の構造をよく理解していれば,それほど神経質になる必要もなく,“あれ?”と思ったときに確かめる程度で済んでしまう。HTML において“文書の構造”の重要さを認識していただきたい。