0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Tailwind CSS入門 Day11】作品一覧テーブルを作る

0
Posted at

目次

はじめに

この記事は、Tailwind CSSで管理画面UIを1ステップずつ作る学習記録です。
過去記事は末尾の「シリーズ記事」にまとめています。

今日作るもの

Day11では、Day10で作ったPC管理画面レイアウトのメインエリアに、作品一覧テーブルを作ります。

Day10までは、右側のメインエリアに作品カードを1件表示していました。

今回は、その作品カードを一覧テーブルに置き換えて、管理画面で作品情報を確認できる形にします。

┌────────────────────────────────────┐
│ Admin Dashboard        管理者表示   │
├──────────────┬─────────────────────┤
│ サイドバー    │ メインエリア          │
│              │ 作品管理              │
│              │ 登録済み作品の確認... │
│              │ ┌─────────────────┐ │
│              │ │ 作品一覧テーブル  │ │
│              │ └─────────────────┘ │
└──────────────┴─────────────────────┘

今回作るテーブルには、以下の項目を表示します。

項目 内容
ID 作品ID
サムネイル 作品のサムネイル画像
タイトル 登録されている作品タイトル
平均評価 作品の平均評価
レビュー数 投稿されたレビュー件数
操作 詳細・編集・削除

Day11では、まず table / thead / tbody / tr / th / td を使って、作品一覧テーブルの基本構造を作ります。

テーブルの細かい見た目調整は、次回のDay12で扱います。

STEP 1:Day11用HTMLファイルを作る

まず、Day11用のHTMLファイルを作成します。

day11-item-table.html

Day10の完成形を元にして進めたいので、Day10ファイルをコピーします。

cp day10-pc-admin-layout.html day11-item-table.html

エクスプローラーでコピーしても大丈夫です。

現在の構成に、Day11用ファイルが追加される形です。

tailwind-learning/
├── day01-heading.html
├── day02-card-base.html
├── day03-image-card.html
├── day04-card-text.html
├── day05-card-buttons.html
├── day06-card-complete.html
├── day07-button-colors.html
├── day08-admin-header.html
├── day09-pc-sidebar.html
├── day10-pc-admin-layout.html
├── day11-item-table.html
└── images/
    └── sample-poster.png

STEP 2:タイトルをDay11用に直す

day11-item-table.html<title> を、Day11用に変更します。

修正前

<title>Day 10 PC管理画面レイアウトを作る</title>

修正後

<title>Day 11 作品一覧テーブルを作る</title>

このSTEPでは、ブラウザタブに表示されるタイトルだけ を変更します。

画面に表示されているヘッダー、サイドバー、メインエリア、作品カード部分はまだ触りません。

STEP 3:作品カードを削除する

Day11では、作品カードを 作品一覧テーブル に置き換えます。

まずは、Day10で表示していた作品カード部分を削除します。

削除する部分

day11-item-table.html の中から、以下の作品カード部分を削除してください。

<div class="bg-white border rounded-lg shadow-sm p-4 flex gap-4 max-w-sm mt-6">
    <!-- 作品カード -->
    <img
        src="images/sample-poster.png"
        alt="サンプル画像"
        class="w-20 h-28 object-cover rounded-md flex-shrink-0"
    >

    <div class="flex-1">
        <p class="text-lg font-bold">サンプル映画タイトル</p>
        <p class="text-sm text-gray-600">
            平均評価:<span class="text-yellow-500">4.2</span>
        </p>
        <p class="text-sm text-gray-600">レビュー数:12件</p>

        <div class="flex gap-2 mt-3 flex-wrap">
            <button class="px-3 py-1.5 rounded-md border border-gray-300 text-sm font-medium text-gray-700 hover:bg-gray-200">
                詳細
            </button>

            <button class="px-3 py-1.5 rounded-md border border-blue-500 text-sm font-medium text-blue-600 hover:bg-blue-100">
                編集
            </button>

            <button class="px-3 py-1.5 rounded-md border border-red-500 text-sm font-medium text-red-600 hover:bg-red-100">
                削除
            </button>
        </div>
    </div>
</div>

削除後の状態

メインエリアは、いったん見出しと補足文だけ残る形になります

<div class="flex-1 p-6 bg-gray-100 min-h-screen">
    <h2 class="text-lg font-bold">
        作品管理
    </h2>

    <p class="text-sm text-gray-600 mt-1">
        登録済み作品の確認・編集・削除を行います。
    </p>
</div>

今回のポイント

Day11では作品カードを作り込むのではなく、一覧テーブルに置き換えることが目的です。

まず作品カードを削除して、テーブルを追加するための場所を空けます。

STEP 4:テーブルを置くための白い箱を作る

作品カードを削除して、メインエリアには見出しと補足文だけが残りました。

次は、作品一覧テーブルを入れるための 白い箱 を作ります。

修正前

<div class="flex-1 p-6 bg-gray-100 min-h-screen">
    <h2 class="text-lg font-bold">
        作品管理
    </h2>

    <p class="text-sm text-gray-600 mt-1">
        登録済み作品の確認・編集・削除を行います。
    </p>
</div>

修正後

<div class="flex-1 p-6 bg-gray-100 min-h-screen">
    <h2 class="text-lg font-bold">
        作品管理
    </h2>

    <p class="text-sm text-gray-600 mt-1">
        登録済み作品の確認・編集・削除を行います。
    </p>

    <div class="bg-white border rounded-lg shadow-sm mt-6">
        <!-- 作品一覧テーブル -->
    </div>
</div>

今回追加するclass

class 役割
bg-white テーブルを置くエリアの背景を白にする
border 白い箱に枠線を付ける
rounded-lg 白い箱の角を丸くする
shadow-sm 白い箱に小さな影を付ける
mt-6 補足文と白い箱の間に余白を付ける

今回のポイント

Day11では、いきなり table を直接置くのではなく、まずテーブルを入れるための白い箱を作ります。

これにより、管理画面のメインエリア内に 作品一覧テーブル用の領域 ができたことが分かりやすくなります。

このSTEPでは、まだ table は作りません。
次のSTEPで、この白い箱の中に table 要素を追加します。

STEP 5:table要素を追加する

テーブルを置くための白い箱ができました。

次は、その中に table 要素を追加します。

修正前

<div class="bg-white border rounded-lg shadow-sm mt-6">
    <!-- 作品一覧テーブル -->
</div>

修正後

<div class="bg-white border rounded-lg shadow-sm mt-6">
    <table>
        <!-- 作品一覧テーブル -->
    </table>
</div>

今回追加するHTML要素

要素 役割
table 表形式のデータを表示するための要素

今回のポイント

Day11では、作品情報を一覧で表示するために table 要素を使います。

このSTEPでは、まだ見出し行やデータ行は作りません。

まずは、白い箱の中に 作品一覧テーブルの土台 を用意します。

白い箱
└── table

STEP 6:テーブルの見出し行を作る

table 要素を追加できたので、次はテーブルの 見出し行 を作ります。

Day11では、作品一覧として最低限分かる項目を並べます。

ID / サムネイル / タイトル / 平均評価 / レビュー数 / 操作

修正前

<div class="bg-white border rounded-lg shadow-sm mt-6">
    <table>
        <!-- 作品一覧テーブル -->
    </table>
</div>

修正後

<div class="bg-white border rounded-lg shadow-sm mt-6">
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>サムネイル</th>
                <th>タイトル</th>
                <th>平均評価</th>
                <th>レビュー数</th>
                <th>操作</th>
            </tr>
        </thead>
    </table>
</div>

今回追加するHTML要素

要素 役割
thead テーブルの見出し部分を表す
tr テーブルの1行を表す
th 見出し用のセルを表す

今回のポイント

table は、行とセルを組み合わせて作ります。

今回は見出し行なので、thead の中に tr を作り、その中に th を並べます。

table
└── thead
    └── tr
        ├── th:ID
        ├── th:サムネイル
        ├── th:タイトル
        ├── th:平均評価
        ├── th:レビュー数
        └── th:操作

このSTEPでは、まだTailwind CSSのclassは追加しません。
まずは、テーブルの見出し構造を作ることを優先します。

STEP 7:作品データの行を追加する

テーブルの見出し行を作れたので、次はサンプルの作品データを追加します。

今回は、映画レビューアプリの管理者画面に寄せて、サムネイル付きの作品データを3行追加します。

修正前

<div class="bg-white border rounded-lg shadow-sm mt-6">
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>サムネイル</th>
                <th>タイトル</th>
                <th>平均評価</th>
                <th>レビュー数</th>
                <th>操作</th>
            </tr>
        </thead>
    </table>
</div>

修正後

<div class="bg-white border rounded-lg shadow-sm mt-6">
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>サムネイル</th>
                <th>タイトル</th>
                <th>平均評価</th>
                <th>レビュー数</th>
                <th>操作</th>
            </tr>
        </thead>

        <tbody>
            <tr>
                <td>1</td>
                <td>
                    <img
                        src="images/sample-poster.png"
                        alt="サンプル画像"
                        class="w-16 h-24 object-cover rounded-md"
                    >
                </td>
                <td>サンプル映画タイトル</td>
                <td>4.2</td>
                <td>12件</td>
                <td>
                    詳細 編集 削除
                </td>
            </tr>

            <tr>
                <td>2</td>
                <td>
                    <img
                        src="images/sample-poster.png"
                        alt="サンプル画像"
                        class="w-16 h-24 object-cover rounded-md"
                    >
                </td>
                <td>サンプル映画タイトル2</td>
                <td>3.8</td>
                <td>8件</td>
                <td>
                    詳細 編集 削除
                </td>
            </tr>

            <tr>
                <td>3</td>
                <td>
                    <img
                        src="images/sample-poster.png"
                        alt="サンプル画像"
                        class="w-16 h-24 object-cover rounded-md"
                    >
                </td>
                <td>サンプル映画タイトル3</td>
                <td>4.7</td>
                <td>20件</td>
                <td>
                    詳細 編集 削除
                </td>
            </tr>
        </tbody>
    </table>
</div>

今回追加するHTML要素

要素 役割
tbody テーブルのデータ部分を表す
td 通常のデータセルを表す
img サムネイル画像を表示する

今回追加するTailwind CSSのclass

class 役割
w-16 サムネイル画像の幅を固定する
h-24 サムネイル画像の高さを固定する
object-cover 指定したサイズに合わせて画像をトリミングして表示する
rounded-md サムネイル画像の角を少し丸くする

今回のポイント

thead はテーブルの見出し部分、tbody は実際のデータ部分を表します。

今回は、tbody の中に tr を3行作り、その中に td を並べて作品データを表示します。

また、サムネイル画像には w-16h-24object-coverrounded-md を付けています。

Day11ではテーブル全体の細かい見た目調整は行いませんが、画像にサイズ指定を付けないと元画像の大きさで表示され、テーブルの行が大きく崩れてしまいます。

そのため、今回はサムネイルとして表示するための最低限の指定として、画像サイズとトリミングだけ設定します。

テーブル全体の余白、罫線、見出し行の背景色、操作ボタンの見た目調整は、次回のDay12で扱います。

table
├── thead
│   └── 見出し行
└── tbody
    ├── 作品データ行 1
    ├── 作品データ行 2
    └── 作品データ行 3

1行だけでも構造は確認できますが、複数行にすると一覧テーブルらしさが分かりやすくなります。

また、次回Day12でテーブルの見た目を調整するときも、複数行ある方が、余白・罫線・行間の変化を確認しやすくなります。

このSTEPでは、テーブル全体の余白や罫線の調整はまだ行いません。

ただし、サムネイル画像だけは、元画像の大きさで表示されるとテーブルが大きく崩れるため、最低限のサイズ指定とトリミングを行います。

完成コード

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Day 11 作品一覧テーブルを作る</title>
    <script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100">
    <header class="bg-gray-900 text-white px-6 py-4 flex justify-between items-center">
        <h1 class="text-xl">
            Admin Dashboard
        </h1>

        <p class="text-sm">
            管理者:遅咲きエンジニア
        </p>
    </header>

    <main class="flex items-start">
        <aside class="w-48 bg-gray-600 text-white p-4 min-h-screen">
            <!-- サイドバー -->
            <p class="font-bold">
                サイドバー
            </p>

            <ul class="mt-4 space-y-2 text-sm">
                <li class="px-2 py-1 rounded hover:bg-gray-500">ダッシュボード</li>
                <li class="px-2 py-1 rounded hover:bg-gray-500">作品一覧</li>
                <li class="px-2 py-1 rounded hover:bg-gray-500">レビュー管理</li>
            </ul>
        </aside>

        <div class="flex-1 p-6 bg-gray-100 min-h-screen">
            <h2 class="text-lg font-bold">
                作品管理
            </h2>

            <p class="text-sm text-gray-600 mt-1">
                登録済み作品の確認・編集・削除を行います。
            </p>

            <div class="bg-white border rounded-lg shadow-sm mt-6">
                <table>
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>サムネイル</th>
                            <th>タイトル</th>
                            <th>平均評価</th>
                            <th>レビュー数</th>
                            <th>操作</th>
                        </tr>
                    </thead>

                    <tbody>
                        <tr>
                            <td>1</td>
                            <td>
                                <img
                                    src="images/sample-poster.png"
                                    alt="サンプル画像"
                                    class="w-16 h-24 object-cover rounded-md"
                                >
                            </td>
                            <td>サンプル映画タイトル</td>
                            <td>4.2</td>
                            <td>12件</td>
                            <td>
                                詳細 編集 削除
                            </td>
                        </tr>

                        <tr>
                            <td>2</td>
                            <td>
                                <img
                                    src="images/sample-poster.png"
                                    alt="サンプル画像"
                                    class="w-16 h-24 object-cover rounded-md"
                                >
                            </td>
                            <td>サンプル映画タイトル2</td>
                            <td>3.8</td>
                            <td>8件</td>
                            <td>
                                詳細 編集 削除
                            </td>
                        </tr>

                        <tr>
                            <td>3</td>
                            <td>
                                <img
                                    src="images/sample-poster.png"
                                    alt="サンプル画像"
                                    class="w-16 h-24 object-cover rounded-md"
                                >
                            </td>
                            <td>サンプル映画タイトル3</td>
                            <td>4.7</td>
                            <td>20件</td>
                            <td>
                                詳細 編集 削除
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </main>
</body>
</html>

使ったHTML要素

要素 内容
table 表形式のデータ全体を表す
thead テーブルの見出し部分を表す
tbody テーブルのデータ部分を表す
tr テーブルの1行を表す
th 見出し用のセルを表す
td 通常のデータセルを表す
img サムネイル画像を表示する

今回は、Tailwind CSSのclassだけでなく、テーブルを作るためのHTML要素も確認しました。

使ったTailwind CSSのclass

class 役割
bg-white テーブルを置くエリアの背景を白にする
border テーブルを置くエリアに枠線を付ける
rounded-lg テーブルを置くエリアの角を丸くする
shadow-sm テーブルを置くエリアに小さな影を付ける
mt-6 補足文とテーブルエリアの間に余白を付ける
w-16 サムネイル画像の幅を固定する
h-24 サムネイル画像の高さを固定する
object-cover 指定したサイズに合わせて画像をトリミングして表示する
rounded-md サムネイル画像の角を少し丸くする

表示確認

以下の点をブラウザで確認しました。

確認すること

  • 右側メインエリアに白い箱が表示されている
  • 白い箱の中にテーブルが表示されている
  • 見出し行が表示されている
  • ID / サムネイル / タイトル / 平均評価 / レビュー数 / 操作 が並んでいる
  • 作品データが3行表示されている
  • サムネイル画像が表示されている

この時点で気にしなくてよいこと

  • テーブルの余白が詰まっている
  • 罫線が見づらい
  • 見出し行に背景色がない
  • 操作ボタンが文字だけになっている

このあたりは、次回の Day12:テーブルの見た目調整 で扱う範囲です。

day11-item-table-complete.png

今日分かったこと

Day11では、Day10で作ったPC管理画面レイアウトのメインエリアに、作品一覧テーブルを追加しました。

まず、Day10で表示していた作品カードを削除し、代わりにテーブルを置くための白い箱を作りました。

bg-whiteborderrounded-lgshadow-smmt-6 を使うことで、メインエリア内にテーブル用の表示領域を作れました。

テーブルは、tabletheadtbodytrthtd を組み合わせて作ることが分かりました。

thead には見出し行を置き、tbody には実際の作品データを入れることで、テーブルの役割を分けられました。

今回は、ID、サムネイル、タイトル、平均評価、レビュー数、操作の列を作りました。

サムネイル画像には img 要素を使い、w-16h-24object-coverrounded-md を付けました。

最初は画像サイズを指定していなかったため、元画像の大きさで表示され、テーブルの行が大きく崩れてしまいました。

そのため、Day11ではテーブル全体の細かい見た目調整までは行わないものの、サムネイルとして表示するための最低限の画像サイズ指定は必要だと分かりました。

また、1行だけでは一覧テーブルらしさが分かりにくいため、サンプルデータを3行にしました。

複数行にすることで、作品一覧テーブルとしての形が分かりやすくなり、次回のDay12で余白や罫線、見出し行の背景色などを調整しやすくなりました。

Day11では、テーブルの見た目を完成させるのではなく、作品一覧テーブルのHTML構造を作ることができました。

次回やること

【Tailwind CSS入門 Day12】テーブルの見た目を整える

シリーズ記事

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?