神戸学院大学 経営学部 林坂ゼミ

HTML 入門トップページ

« 戻る 次へ »

HTML 入門

HTML 文書を検証しよう

コンテンツカテゴリを理解する

次のような HTML 文書を準備します.

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>コンテンツカテゴリ</title>
</head>
<body>
  <h1>コンテンツカテゴリ</h1>
  <p>
    段落の本文です。
    <ul>
      <li>箇条書き</li>
      <li>箇条書き</li>
      <li>箇条書き</li>
    </ul>
  </p>
</body>
</html>

ブラウザでは問題なく表示できます.

2004web00100

上のコードを validation でチェックするとエラーが表示されました.このエラーは,16行目の閉じタグ </p> に対応する開始タグ <p> が見つからないというエラーです.開始タグは 9 行目にあるはずですが...

2004web00101

16行目の閉じタグを11行目に移動するとエラーがなくなりました.

2004web00102

コンテンツカテゴリ

HTML ではあるタグの中に入れることのできるタグの種類が決まっています.例えば,<p> タグの中に <br> タグを入れることはできるのですが,<ul> タグを入れることはできません.上のエラーはそのルールに違反しているエラーなので,閉じタグ </p> を11行目に移動させることでエラーが表示されなくなりました.

実際のところ,このようなすべてのルールを覚える必要はありません.コンテンツカテゴリを理解すれば,あるタグの中にどのタグを入れてよいかが理解できるようになります.

コンテンツカテゴリは次の3種類があります.

上の主要コンテンツカテゴリの中にさらに フローコンテンツ (Flow content) と呼ばれるカテゴリがあります.このフローコンテンツ<body> 要素の中に入ることができるほどんどの要素を含む広いカテゴリです.このフローコンテンツの中にさらに次の5つとメタデータコンテンツ (Metadata content)の一部があります.詳細はここの図を確認してください.

例えば,MDN のサイトで<p> タグ(段落要素)のリファレンスを確認します.このページを確認すると <p> のコンテンツカテゴリは「フローコンテンツ」(および知覚可能コンテンツ)で,許可されている内容は「記述コンテンツ」であることがわかります.

同様に,MDN のサイトで <ul> タグ(順序なしリスト要素)のリファレンスを確認します.このページを確認すると <ul> のコンテンツカテゴリも「フローコンテンツ」であることがわかります.

したがって,「記述コンテンツ」が許可された <p> の中に「フローコンテンツ」である <ul> が入ることはできません.一方で <br>(改行要素)<img>(画像埋め込み要素) は「記述コンテンツ」であるので,<p> の中に入ることができます.

なお,上のエラーが表示されたときには「16行目の閉じタグ </p> に対応する開始タグ <p> が見つからないというエラーです」と説明しました.この原因を理解するために,MDN のサイトで<p> タグ(段落要素)のリファレンスを確認します.このページの「タグの省略」を確認すると 「<p> 要素の直後に続く要素が <ul> の場合は終了タグを省略することが可能」との記載があります.つまり,次のコードのように9行目の <p> の後,11行目に <ul> が現れたため,その時点で閉じタグ </p> が省略されたものとブラウザが判断します.その後,16行目で閉じタグ </p> 現れたことでエラーとなりました.したがって閉じタグ </p> を省略した下のコードではエラーにはならないはずなので確認してください.

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>コンテンツカテゴリ</title>
</head>
<body>
  <h1>コンテンツカテゴリ</h1>
  <p>
    段落の本文です。
    <ul>
      <li>箇条書き</li>
      <li>箇条書き</li>
      <li>箇条書き</li>
    </ul>
</body>
</html>

様々なタグがどのコンテンツカテゴリに属しているのか,また,どのコンテンツカテゴリを許可しているかを覚えることは大変です.必要になったときに MDN の HTML 要素リファレンスを参照して問題を解決できるようになっておくと良いでしょう.

目次に戻る