HTML/CSS / LESSON 05 / HT05

HTML/CSS:意味のあるタグ(セマンティック)

1学習の目的

2基礎解説

すべてを div で囲むこともできます。しかしそれではどこがメニューでどこが本文か、機械には分かりません。読み上げソフトや検索エンジンに構造を伝えるのが、セマンティックタグの役割です。

タグ意味使いどころ
header導入部ロゴ・サイト名
navナビゲーションメニュー
main主要な内容ページに1つだけ
footer末尾著作権・連絡先
✅ 覚えるべき重要ポイント
  1. main はページに1つだけ。そのページの中心となる内容を囲む。ヘッダーやフッターは main の外に置く。
  2. article は「それ単体で成立する内容」。ブログ記事や商品カードなど、切り出しても意味が通るもの。section は「文書の一区切り」で、見出しとセットで使う。
  3. headerfooter は何度でも使える。ページ全体だけでなく、記事1つひとつにも付けられる。main だけが1つ限定。
  4. div は「意味を持たない箱」。適切なタグが無いときや、CSSで装飾するためだけにまとめたいときに使う。最後の手段と考える。
  5. div は縦に積まれ、span は横に流れる。div はブロック(block)、span はインライン(inline)——この違いはHT12で詳しく扱う。

現場使用例:サイト全体のレイアウト、ブログ記事の構造化、商品一覧のカード。セマンティックに書かれたページは、検索エンジンが内容を理解しやすくなる

<body>

  <header>
    <h1>ゼロカラカフェ</h1>
    <nav>
      <ul>
        <li><a href="index.html">ホーム</a></li>
        <li><a href="menu.html">メニュー</a></li>
      </ul>
    </nav>
  </header>

  <main>
    <article>
      <header>
        <h2>新メニューのお知らせ</h2>
        <time datetime="2026-08-19">2026年8月19日</time>
      </header>

      <p>本文です。</p>

      <footer>
        <p>担当:山田</p>
      </footer>
    </article>

    <aside>
      <h2>関連情報</h2>
      <p>補足的な内容。</p>
    </aside>
  </main>

  <footer>
    <address>東京都渋谷区1-2-3</address>
    <p>&copy; 2026 ゼロカラカフェ</p>
  </footer>

</body>

<!-- 意味のあるタグが無い場合だけ div を使う -->
<div class="card">
  <span>文中の一部だけ装飾したいとき</span>
</div>

3基本ドリル(10問)

HT05-D01 header の中に h1「サイト名」を入れたHTMLを書け。 コーディング★☆☆無料
期待される結果

header の中に h1 がある

ヒント

<header> で h1 を囲む。

模範解答
<header>
  <h1>サイト名</h1>
</header>
解説

header はページやセクションの導入部を表す。ロゴやサイト名を入れるのが一般的。

HT05-D02 ページに1つだけ使うべきタグはどれか。
A. header B. main C. section D. article
選択★☆☆無料
期待される結果

解答 == B

ヒント

ページの中心となる内容を表すタグ。

模範解答
B
解説

main はページの主要部分なので1つだけ。header や footer は記事ごとにも使えるので複数可。

HT05-D03 nav の中にリスト形式のメニュー(「ホーム」「メニュー」の2項目、リンクは index.html と menu.html)を入れたHTMLを書け。 コーディング★☆☆無料
期待される結果

nav の中に li が2個、a が2個

ヒント

nav で ul を囲み、li の中に a を入れる。

模範解答
<nav>
  <ul>
    <li><a href="index.html">ホーム</a></li>
    <li><a href="menu.html">メニュー</a></li>
  </ul>
</nav>
解説

nav は「主要なナビゲーション」を表す。ページ内のすべてのリンクを nav で囲む必要はなく、メニューなど主要な移動手段に使う。

HT05-D04 ページの主要部分を表すタグを補ってコードを完成させよ。 穴埋め★☆☆無料
コード
<header><h1>タイトル</h1></header>
<____>
  <p>本文です。</p>
</____>
期待される結果

main の中に p がある

ヒント

「主要な」を意味する4文字のタグ。

模範解答
main
解説

main で囲むと「ここが本題」と明示できる。読み上げソフトは、メニューを飛ばして main から読み始められるようになる。

HT05-D05 div を使うべき場面はどれか。
A. 常に div を使う B. 適切な意味のタグが無いとき C. 見出しに使う D. リンクに使う
選択★☆☆無料
期待される結果

解答 == B

ヒント

div は意味を持たないタグ。

模範解答
B
解説

div は最後の手段。まず適切なタグが無いか考え、無ければ div を使う——この順序が大切。

HT05-D06 article の中に、header(h2「記事タイトル」)・段落・footer(「投稿者:山田」)を入れたHTMLを書け。 コーディング★★☆広告解放
期待される結果

article の中に header・p・footer がある

ヒント

article の中に header と footer を入れられる。

模範解答
<article>
  <header>
    <h2>記事タイトル</h2>
  </header>

  <p>記事の本文です。</p>

  <footer>
    <p>投稿者:山田</p>
  </footer>
</article>
解説

header と footer は article の中でも使える。「その記事の導入部と末尾」という意味になり、ページ全体の header とは別物として扱われる。

HT05-D07 補足的な内容を表すタグを補ってコードを完成させよ。 穴埋め★★☆広告解放
コード
<main>
  <p>本文</p>
</main>
<____>
  <p>関連リンク</p>
</____>
期待される結果

aside の中に p がある

ヒント

「わきに置く」を意味する5文字のタグ。

模範解答
aside
解説

aside は本題から少し外れた補足。サイドバーや関連記事のリンクなどに使う。

HT05-D08 articlesection の違いとして正しいものはどれか。
A. 同じもの B. article は単体で成立する内容、section は文書の一区切り C. section のほうが新しい D. article は1つだけ
選択★★☆広告解放
期待される結果

解答 == B

ヒント

切り出して他所に置いても意味が通るかどうか。

模範解答
B
解説

ブログ記事や商品カードは article(それだけで意味が通る)。「会社概要」の中の「沿革」は section(文書の一部)。

HT05-D09 日付を time タグで表せ。表示は「2026年8月19日」、機械が読む値は 2026-08-19 とすること。 コーディング★★☆広告解放
期待される結果

time の datetime が 2026-08-19

ヒント

<time datetime="2026-08-19">表示用の文字</time> と書く。

模範解答
<time datetime="2026-08-19">2026年8月19日</time>
解説

人間向けの表示と、機械向けの値を分けられる。「8月19日」では機械には何年か分からないが、datetime があれば正確に伝わる。

HT05-D10 footer の中に、address タグで「東京都渋谷区1-2-3」という連絡先を入れたHTMLを書け。 コーディング★★☆広告解放
期待される結果

footer の中に address がある

ヒント

<address> は連絡先を表すタグ。既定で斜体になる。

模範解答
<footer>
  <address>東京都渋谷区1-2-3</address>
</footer>
解説

address は「連絡先」を表す。住所全般ではなく、その文書やサイトの問い合わせ先に使うのが本来の用途。

4実践シナリオ(5問)

HT05-S01 【ページの骨組み】header(h1「ゼロカラカフェ」)、main(段落)、footer(段落「© 2026」)という3層構造のHTMLを書け。 コーディング★★☆広告解放
期待される結果

header・main・footer がそれぞれ1個

ヒント

3つのタグを縦に並べる。main は header と footer の間。

模範解答
<header>
  <h1>ゼロカラカフェ</h1>
</header>

<main>
  <p>本日も営業しています。</p>
</main>

<footer>
  <p>&copy; 2026 ゼロカラカフェ</p>
</footer>
解説

これがWebページの最も基本的な骨組み。ほぼすべてのサイトがこの3層構造をしている。

HT05-S02 【ヘッダー内のナビ】header の中に h1「サイト名」と nav(「ホーム」「会社概要」の2リンク)を入れたHTMLを書け。 コーディング★★☆広告解放
期待される結果

header の中に h1 と nav、nav の中に a が2個

ヒント

header の中に nav を入れる形が一般的。

模範解答
<header>
  <h1>サイト名</h1>

  <nav>
    <ul>
      <li><a href="index.html">ホーム</a></li>
      <li><a href="about.html">会社概要</a></li>
    </ul>
  </nav>
</header>
解説

ヘッダーにナビを入れるのが定番。サイト名とメニューが並ぶ、見慣れた形になる。

HT05-S03 【記事カード】article を2つ並べ、それぞれに h2(「記事1」「記事2」)と段落を入れたHTMLを書け。 コーディング★★☆広告解放
期待される結果

article が2個、それぞれに h2 と p がある

ヒント

article は「単体で成立する内容」なので、記事ごとに使う。

模範解答
<article>
  <h2>記事1</h2>
  <p>1つ目の記事の本文です。</p>
</article>

<article>
  <h2>記事2</h2>
  <p>2つ目の記事の本文です。</p>
</article>
解説

記事一覧では article を並べる。それぞれが独立した内容なので、切り出してRSSなどに配信しても意味が通る。

HT05-S04 【main と aside】main の中に article(h2「本文」+段落)を、その隣に aside(h2「関連情報」+段落)を配置したHTMLを書け。aside は main の中に入れること。 コーディング★★★広告解放
期待される結果

main の中に article と aside がある

ヒント

main の中に article と aside を並べる。

模範解答
<main>
  <article>
    <h2>本文</h2>
    <p>記事の内容です。</p>
  </article>

  <aside>
    <h2>関連情報</h2>
    <p>あわせて読みたい記事。</p>
  </aside>
</main>
解説

aside は main の中にも外にも置ける。記事に関連する補足なら中、サイト全体のサイドバーなら外——内容との関係で判断する。

HT05-S05 【div と span の使い分け】商品情報を div で囲み、その中の「セール中」という文字だけを span で囲んだHTMLを書け(商品名は h3「ノートPC」、価格は段落「128,000円 セール中」)。 コーディング★★★広告解放
期待される結果

div の中に h3・p、p の中に span がある

ヒント

div はブロック全体を囲む箱、span は文中の一部を囲む。

模範解答
<div class="product">
  <h3>ノートPC</h3>
  <p>128,000円 <span class="sale">セール中</span></p>
</div>
解説

div は縦に積まれ、span は文中に溶け込む。この違いは display の値(block と inline)によるもので、HT12で詳しく扱う。

5仕上げ課題

HT05-FINAL 【ブログページの構造化】セマンティックタグを使って、ブログページ全体を組み立てよ。

構造(この順序で)
header
 ├ h1:ゼロカラブログ
 └ nav(ul + li + a):「ホーム」(index.html)「記事一覧」(posts.html)

main
 ├ article
 │ ├ header:h2「HTMLの基本」+ time(datetime="2026-08-19"、表示「2026年8月19日」)
 │ ├ 段落:HTMLはWebの骨組みです。
 │ └ footer:段落「著者:山田」
 └ aside:h2「関連記事」+ 段落

footer
 ├ address東京都渋谷区1-2-3
 └ 段落:© 2026 ゼロカラブログ

要素の数:header×2、footer×2、main×1、article×1、aside×1、nav×1、time×1、address×1、h1×1、h2×2
総合★★★広告解放
期待される結果

すべての要素の数と入れ子構造が一致

ヒント

header と footer はページ全体と article の中で計2つずつになる。main の中に article と aside を並べる。time には datetime 属性を付ける。

模範解答
<header>
  <h1>ゼロカラブログ</h1>

  <nav>
    <ul>
      <li><a href="index.html">ホーム</a></li>
      <li><a href="posts.html">記事一覧</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <header>
      <h2>HTMLの基本</h2>
      <time datetime="2026-08-19">2026年8月19日</time>
    </header>

    <p>HTMLはWebの骨組みです。</p>

    <footer>
      <p>著者:山田</p>
    </footer>
  </article>

  <aside>
    <h2>関連記事</h2>
    <p>CSSの基本も合わせてどうぞ。</p>
  </aside>
</main>

<footer>
  <address>東京都渋谷区1-2-3</address>
  <p>&copy; 2026 ゼロカラブログ</p>
</footer>
解説

header と footer が2つずつあることに注目してほしい。1つはページ全体の、もう1つは記事の——それぞれ「何の導入部・末尾なのか」が入れ子の位置で決まる。これは矛盾ではなく、正しい使い方だ。

一方で main は1つしかない。「このページの本題はここ」という宣言は、複数あっては意味をなさないからだ。読み上げソフトを使う人は、メニューを聞き流して main から読み始められる——この機能は main が1つだからこそ成立する。

<time datetime="2026-08-19">2026年8月19日</time> という書き方も重要だ。人間には「2026年8月19日」と読ませ、機械には 2026-08-19 という正確な値を渡す。表示と意味を分離するという考え方は、HTMLの随所に現れる。

そして、このページには div が1つも出てこない。適切なタグがあるなら、そちらを使う——div はあくまで最後の手段だ。すべてを div で書いたページも見た目は同じになるが、機械にとっては意味のない箱が並んでいるだけになる。

ここまででHTMLの構造は一通り学んだ。次章ではフォームを扱い、ユーザーからの入力を受け取る方法を学ぶ。