HTML/CSS / LESSON 04 / HT04

HTML/CSS:リストと表

1学習の目的

2基礎解説

やりたいことタグ特徴
箇条書きul + li順序に意味がない
番号付きol + li順序に意味がある
用語と説明dl + dt + dd定義リスト
table + tr + th/td行と列のデータ
✅ 覚えるべき重要ポイント
  1. ul は順序なし、ol は順序あり。手順や順位なら ol、単なる項目の列挙なら ul を使う。見た目ではなく意味で選ぶ
  2. li は必ず ulol の中に置く。単独では使えない。逆に ul の直下には li 以外を置かない。
  3. 表の見出しセルは th、データは td。th は太字・中央寄せになるが、それ以上に「これは見出しである」という意味を持つ。
  4. 表の構造は table > tr > th/td。tr が1行を表し、その中に th や td を並べる。行が先、セルが後という入れ子の順序を間違えない。
  5. colspan で横方向、rowspan で縦方向にセルを結合できる。結合した分だけ、その行のセル数を減らす必要がある。

現場使用例:ナビゲーションメニュー(ul)、手順の説明(ol)、料金表・スペック表(table)、用語集(dl)。リストはCSSで横並びにできるので、メニューの土台として最も多く使われる。

<!-- 箇条書き(順序に意味がない) -->
<ul>
  <li>コーヒー</li>
  <li>紅茶</li>
</ul>

<!-- 番号付き(順序に意味がある) -->
<ol>
  <li>お湯を沸かす</li>
  <li>豆を挽く</li>
  <li>抽出する</li>
</ol>

<!-- 入れ子のリスト -->
<ul>
  <li>ドリンク
    <ul>
      <li>ホット</li>
      <li>アイス</li>
    </ul>
  </li>
</ul>

<!-- 用語と説明 -->
<dl>
  <dt>HTML</dt>
  <dd>Webページの骨組みを作る言語</dd>
</dl>

<!-- 表 -->
<table>
  <caption>料金表</caption>
  <thead>
    <tr>
      <th>プラン</th>
      <th>月額</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ベーシック</td>
      <td>5,000円</td>
    </tr>
  </tbody>
</table>

<!-- セルの結合(2列ぶんを1つに) -->
<tr>
  <td colspan="2">合計</td>
</tr>

3基本ドリル(10問)

HT04-D01 「コーヒー」「紅茶」「ジュース」の箇条書きを作るHTMLを書け。 コーディング★☆☆無料
期待される結果

ul の中に li が3個

ヒント

<ul> の中に <li> を3つ並べる。

模範解答
<ul>
  <li>コーヒー</li>
  <li>紅茶</li>
  <li>ジュース</li>
</ul>
解説

ul は unordered list(順序なしリスト)。並び順に意味が無い項目の列挙に使う。既定では黒丸が付く。

HT04-D02 手順(1番目、2番目…)を表すのに適したタグはどれか。
A. <ul> B. <ol> C. <dl> D. <table>
選択★☆☆無料
期待される結果

解答 == B

ヒント

ordered list(順序ありリスト)。

模範解答
B
解説

順序に意味があるなら ol。番号が自動で振られ、項目を入れ替えても番号がずれない。

HT04-D03 「お湯を沸かす」「豆を挽く」「抽出する」という番号付きリストを作るHTMLを書け。 コーディング★☆☆無料
期待される結果

ol の中に li が3個

ヒント

<ol> の中に <li> を並べる。番号は自動で付く。

模範解答
<ol>
  <li>お湯を沸かす</li>
  <li>豆を挽く</li>
  <li>抽出する</li>
</ol>
解説

番号は自分で書かない。ブラウザが自動で振るので、途中に項目を追加しても番号がずれない。

HT04-D04 リストの項目を表すタグを補ってコードを完成させよ。 穴埋め★☆☆無料
コード
<ul>
  <____>項目1</____>
  <____>項目2</____>
</ul>
期待される結果

li が2個

ヒント

list item の略。2文字。

模範解答
li
解説

li は必ず ul か ol の中に置く。単独で使うことはできない。

HT04-D05 表の見出しセルを表すタグはどれか。
A. <td> B. <th> C. <tr> D. <thead>
選択★☆☆無料
期待される結果

解答 == B

ヒント

table header cell の略。

模範解答
B
解説

th は「これは見出しである」という意味を持つ。太字・中央寄せになるのは結果であって、目的ではない。

HT04-D06 2列2行の表を作れ。1行目は見出し(「商品」「価格」)、2行目はデータ(「ノートPC」「128,000円」)とすること。 コーディング★★☆広告解放
期待される結果

th が2個、td が2個

ヒント

table の中に tr を2つ。1行目は th、2行目は td を使う。

模範解答
<table>
  <tr>
    <th>商品</th>
    <th>価格</th>
  </tr>
  <tr>
    <td>ノートPC</td>
    <td>128,000円</td>
  </tr>
</table>
解説

tr が行、th/td がセル。行を先に作り、その中にセルを並べる——この入れ子の順序が表の基本。

HT04-D07 表の行を表すタグを補ってコードを完成させよ。 穴埋め★★☆広告解放
コード
<table>
  <____>
    <td>A</td>
    <td>B</td>
  </____>
</table>
期待される結果

tr が1個、td が2個

ヒント

table row の略。2文字。

模範解答
tr
解説

tr は1行を表す。この中に th や td を並べることで、横一列が作られる。

HT04-D08 <td colspan="2"> はどういう意味か。
A. 2行ぶん結合 B. 2列ぶん結合 C. 幅を2倍にする D. 2つのセルを作る
選択★★☆広告解放
期待される結果

解答 == B

ヒント

col は column(列)の略。

模範解答
B
解説

colspan は横方向の結合。縦方向は rowspan。結合した分、その行に書くセルの数を減らす必要がある。

HT04-D09 入れ子のリストを作れ。「ドリンク」の下に「ホット」「アイス」を、階層を付けて配置すること。 コーディング★★☆広告解放
期待される結果

li が3個、ul の中に ul がある

ヒント

li の中に ul を入れる。閉じる位置に注意。

模範解答
<ul>
  <li>ドリンク
    <ul>
      <li>ホット</li>
      <li>アイス</li>
    </ul>
  </li>
</ul>
解説

子のリストは li の中に入れる。ul の直下に ul を置くのは誤りで、必ず li を経由する。

HT04-D10 用語と説明のリストを作れ。「HTML」という用語に「Webページの骨組みを作る言語」という説明を対応させること。 コーディング★★☆広告解放
期待される結果

dt が「HTML」、dd が説明文

ヒント

<dl> の中に <dt>(用語)と <dd>(説明)を並べる。

模範解答
<dl>
  <dt>HTML</dt>
  <dd>Webページの骨組みを作る言語</dd>
</dl>
解説

dl は definition list(定義リスト)。用語集やFAQなど、「項目と説明」が対になる情報に適している。

4実践シナリオ(5問)

HT04-S01 【ナビゲーションメニュー】箇条書きの中にリンクを入れ、「ホーム」(index.html)「サービス」(service.html)「会社概要」(about.html)のメニューを作れ。 コーディング★★☆広告解放
期待される結果

li が3個、それぞれの中に a がある

ヒント

li の中に a を入れる。これがメニューの標準的な作り方。

模範解答
<ul>
  <li><a href="index.html">ホーム</a></li>
  <li><a href="service.html">サービス</a></li>
  <li><a href="about.html">会社概要</a></li>
</ul>
解説

メニューは ul + li + a で作るのが標準。CSSで横並びにすれば(HT13)、一般的なナビゲーションバーになる。

HT04-S02 【料金表】3列3行の表を作れ。見出しは「プラン」「月額」「容量」、データは「ベーシック / 5,000円 / 10GB」「プロ / 12,000円 / 100GB」とすること。 コーディング★★☆広告解放
期待される結果

th が3個、td が6個、tr が3個

ヒント

1行目に th を3つ、2行目と3行目に td を3つずつ並べる。

模範解答
<table>
  <tr>
    <th>プラン</th>
    <th>月額</th>
    <th>容量</th>
  </tr>
  <tr>
    <td>ベーシック</td>
    <td>5,000円</td>
    <td>10GB</td>
  </tr>
  <tr>
    <td>プロ</td>
    <td>12,000円</td>
    <td>100GB</td>
  </tr>
</table>
解説

各行のセル数を揃えるのが基本。列数がずれると表示が崩れるので、書いたあとに数を確認する習慣を持つ。

HT04-S03 【手順の説明】番号付きリストで「会員登録の手順」を3ステップ(「メールアドレスを入力」「認証メールを確認」「パスワードを設定」)で書け。h2「会員登録の手順」も付けること。 コーディング★★☆広告解放
期待される結果

h2 と ol の中に li が3個

ヒント

見出しの下に ol を配置する。

模範解答
<h2>会員登録の手順</h2>

<ol>
  <li>メールアドレスを入力</li>
  <li>認証メールを確認</li>
  <li>パスワードを設定</li>
</ol>
解説

手順は必ず ol を使う。ul で書くと「順番はどうでもよい」という意味になってしまい、読み手を混乱させる。

HT04-S04 【セル結合】2列の表を作り、最終行だけ横に結合して「合計 131,200円」と表示せよ。1〜2行目は「ノートPC / 128,000円」「マウス / 3,200円」とすること。 コーディング★★★広告解放
期待される結果

td が5個、colspan=2 のセルがある

ヒント

最終行は td を1つだけにして colspan="2" を付ける。

模範解答
<table>
  <tr>
    <td>ノートPC</td>
    <td>128,000円</td>
  </tr>
  <tr>
    <td>マウス</td>
    <td>3,200円</td>
  </tr>
  <tr>
    <td colspan="2">合計 131,200円</td>
  </tr>
</table>
解説

結合した行はセル数が減る。2列を1つにまとめたので、その行の td は1つだけになる——ここを間違えると表が崩れる。

HT04-S05 【構造化された表】caption・thead・tbody を使った表を作れ。表題は「在庫一覧」、見出しは「商品」「在庫」、データは「ノートPC / 5」「マウス / 42」とすること。 コーディング★★★広告解放
期待される結果

caption・thead・tbody がそれぞれ存在する

ヒント

table の直後に caption、次に thead(見出し行)、その後に tbody(データ行)を書く。

模範解答
<table>
  <caption>在庫一覧</caption>
  <thead>
    <tr>
      <th>商品</th>
      <th>在庫</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ノートPC</td>
      <td>5</td>
    </tr>
    <tr>
      <td>マウス</td>
      <td>42</td>
    </tr>
  </tbody>
</table>
解説

thead と tbody で「見出し部分」と「データ部分」を分ける。行数が多い表では、見出しだけ固定表示するといったことも可能になる。

5仕上げ課題

HT04-FINAL 【カフェのメニューページ】リストと表を組み合わせて、メニューページを作れ。

body の内容(この順序で)
① h1:メニュー
② h2:ドリンク
入れ子のリスト
 ・コーヒー
   └ ホット/アイス
 ・紅茶
④ h2:フードメニュー
(caption「本日のおすすめ」、thead に見出し「商品」「価格」、tbody に2行)
 ・パンケーキ / 800円
 ・サンドイッチ / 650円
 ・最終行は結合して「セットでご注文の場合は100円引き」
⑥ h2:ご注文の流れ
番号付きリスト:「レジで注文」「番号札を受け取る」「席でお待ちください」

要素の数:h1×1、h2×3、ul×2(入れ子含む)、ol×1、li×8、th×2、td×5、caption×1
総合★★★広告解放
期待される結果

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

ヒント

③は li の中に ul を入れる(li は「コーヒー」「ホット」「アイス」「紅茶」の4つ)。⑤の結合行は td を1つだけにして colspan="2" を付ける。⑦の li は3つ。合計 li は 4+1(結合行ではない) …ではなく ③4つ + ⑦3つ = 7つ。加えて…実際に数えて確認すること。

模範解答
<h1>メニュー</h1>

<h2>ドリンク</h2>
<ul>
  <li>コーヒー
    <ul>
      <li>ホット</li>
      <li>アイス</li>
    </ul>
  </li>
  <li>紅茶</li>
</ul>

<h2>フードメニュー</h2>
<table>
  <caption>本日のおすすめ</caption>
  <thead>
    <tr>
      <th>商品</th>
      <th>価格</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>パンケーキ</td>
      <td>800円</td>
    </tr>
    <tr>
      <td>サンドイッチ</td>
      <td>650円</td>
    </tr>
    <tr>
      <td colspan="2">セットでご注文の場合は100円引き</td>
    </tr>
  </tbody>
</table>

<h2>ご注文の流れ</h2>
<ol>
  <li>レジで注文</li>
  <li>番号札を受け取る</li>
  <li>席でお待ちください</li>
</ol>
解説

3種類のリスト構造が、それぞれ適切な場面で使われている。ドリンクは順序に意味がないので ul、注文の流れは順序が重要なので ol、フードは価格という対応データがあるので table——「どう見せたいか」ではなく「情報がどういう性質か」でタグを選ぶのがHTMLの考え方だ。

入れ子のリストにも注意点がある。「ホット」「アイス」は「コーヒー」の li の中に入っている。ul の直下に ul を置くのは構造として誤りで、必ず li を経由する。

そして最終行の colspan="2" だ。この行は2列を1つにまとめているので、td は1つしか書かない。もし td を2つ書いてしまうと、その行だけ3列になり表が崩れる。結合したら、その分セルを減らす——単純だが間違えやすい規則。

ここまででHTMLの「文章を組み立てる」部分はほぼ揃った。次章では意味のあるタグ(セマンティック)を学び、ページ全体の構造を正しく伝える方法を扱う。