固定ヘッダー付きテーブルを作る方法【HTML/CSS・サンプルコード付き】

テーブル
無料ツール
テーブルを自由に作成

行数・列数・枠線・背景色・文字色・セル結合などを設定して、HTMLとCSSを自動生成できます。

テーブル作成ツールを使う
新しいタブで開きます

固定ヘッダー付きテーブルを作る方法

固定ヘッダー付きテーブルを作る方法を紹介します。このサンプルでは、テーブルを高さの決まったスクロールエリア内に配置し、データ部分を縦方向へスクロールしても「項目名」「内容」「備考」の見出し行が上部に残るテーブルを作成します。行数の多いテーブルでも列の見出しを確認しながら内容を読み進められるため、各データがどの項目に対応しているのか把握しやすくなります。

サンプルでは、テーブルを囲む要素にmax-height:300px;とoverflow:auto;を設定してスクロールできる範囲を作り、見出しセルにはposition:sticky;とtop:0;を指定して上部へ固定します。JavaScriptは使用せず、HTMLとCSSだけで実装できます。サンプルには項目Aから項目Hまでのデータを用意しているため、実際に縦方向へスクロールしながら固定された見出し行の動作を確認できます。

固定ヘッダー付きテーブルは、商品一覧や会員一覧、売上一覧、在庫管理表、顧客管理画面など、多くの行をまとめて確認するテーブルに利用できます。HTMLでは見出しや各セルの内容を変更でき、CSSではスクロールエリアの高さ、セルの余白や枠線、見出し行の背景色や文字色などを調整できます。表示するデータが増えてテーブルが縦に長くなる場合でも、見出しを表示したまま内容を確認したい場面に活用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

項目名 内容 備考
項目A サンプル内容A 備考A
項目B サンプル内容B 備考B
項目C サンプル内容C 備考C
項目D サンプル内容D 備考D
項目E サンプル内容E 備考E
項目F サンプル内容F 備考F
項目G サンプル内容G 備考G
項目H サンプル内容H 備考H

テーブルを縦方向へスクロールすると、「項目名」「内容」「備考」の見出し行が上部に固定されたまま表示されます。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <!-- 文字コードを指定 -->
  <meta charset="UTF-8">

  <!-- 画面幅に合わせて表示 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ページタイトル -->
  <title>固定ヘッダー付きテーブルを作る方法</title>

  <!-- CSSファイルを読み込み -->
  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!-- テーブルをスクロール表示するエリア -->
  <div class="fixed-table-header_scroll">

    <!-- 固定ヘッダー付きテーブル -->
    <table class="fixed-table-header_table">

      <!-- 固定表示する見出し行 -->
      <thead>
        <tr>
          <th>項目名</th>
          <th>内容</th>
          <th>備考</th>
        </tr>
      </thead>

      <!-- スクロールして確認するデータ行 -->
      <tbody>
        <tr>
          <td>項目A</td>
          <td>サンプル内容A</td>
          <td>備考A</td>
        </tr>
        <tr>
          <td>項目B</td>
          <td>サンプル内容B</td>
          <td>備考B</td>
        </tr>
        <tr>
          <td>項目C</td>
          <td>サンプル内容C</td>
          <td>備考C</td>
        </tr>
        <tr>
          <td>項目D</td>
          <td>サンプル内容D</td>
          <td>備考D</td>
        </tr>
        <tr>
          <td>項目E</td>
          <td>サンプル内容E</td>
          <td>備考E</td>
        </tr>
        <tr>
          <td>項目F</td>
          <td>サンプル内容F</td>
          <td>備考F</td>
        </tr>
        <tr>
          <td>項目G</td>
          <td>サンプル内容G</td>
          <td>備考G</td>
        </tr>
        <tr>
          <td>項目H</td>
          <td>サンプル内容H</td>
          <td>備考H</td>
        </tr>
      </tbody>

    </table>

  </div>

</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLでは「項目名」「内容」「備考」の3列を持つテーブルを作成し、CSSではテーブルを囲むエリアに高さとスクロールを設定します。見出しセルにはposition:sticky;とtop:0;を指定することで、データ部分を縦方向へスクロールしても見出し行が上部に固定されたまま表示されます。JavaScriptは使用しません。

sample/
├── index.html
└── style.css

各ファイルの役割
index.htmlは固定ヘッダー付きテーブルを構成するファイルです。thead内に「項目名」「内容」「備考」の見出しを配置し、tbody内に項目Aから項目Hまでのデータを記述しています。見出しや各セルの内容、データ行の追加・削除はこのファイルから変更できます。

style.cssはスクロールエリアとテーブルのデザインを設定するファイルです。テーブルを囲む要素の最大横幅と最大高さ、スクロール、枠線を設定し、見出しセルにはposition:sticky;とtop:0;を指定しています。セルの余白や枠線、見出しセルの背景色・文字色などもこのファイルから変更できます。

設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置し、2つのファイルを同じ階層へ保存します。index.htmlからstyle.cssを読み込んだ状態でsample/index.htmlをブラウザで開いてください。テーブルのデータ量がスクロールエリアの高さを超えると縦方向へスクロールでき、スクロール中も「項目名」「内容」「備考」の見出し行が上部に固定されたまま表示されます。

カスタマイズできる内容
index.htmlでは「項目名」「内容」「備考」の見出しや、項目Aから項目Hまでの各セルの内容を変更できます。tbody内へtr要素を追加するとデータ行を増やすこともできます。style.cssではスクロールエリアの最大横幅・最大高さ・枠線、セルの余白や枠線、見出しセルの背景色・文字色などを変更できます。固定位置を指定しているtop:0;も、必要に応じて調整できます。

数値調整
style.css
max-width:800px;
スクロールエリアの最大横幅です。値を大きくするとテーブルをより広く表示でき、小さくするとコンパクトになります。

max-height:300px;
スクロールエリアの最大高さです。値を大きくすると一度に表示できるデータ行が増え、小さくすると少ない行数で縦スクロールが発生しやすくなります。

margin:40px auto;
スクロールエリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。autoによって左右中央へ配置されます。

border:1px solid #d1d5db;
スクロールエリアと各セルに設定している枠線です。1pxを大きくすると枠線が太くなり、小さくすると細くなります。

padding:12px;
見出しセルとデータセルの内側余白です。値を大きくすると文字と枠線の間隔が広がり、小さくすると詰まった表示になります。

top:0;
固定した見出しセルの上端位置です。0ではスクロールエリアの上端に固定されます。値を大きくすると、その分だけ上端から離れた位置に表示されます。

z-index:1;
固定した見出しセルの重なり順を指定しています。スクロールするデータセルより見出しセルを手前に表示するための設定です。

レスポンシブ対応
テーブルにはwidth:100%;を設定しているため、スクロールエリアの横幅に合わせて表示されます。また、スクロールエリアにはmax-width:800px;とoverflow:auto;を設定しているため、表示内容が領域を超えた場合はスクロールして確認できます。


こちらもおすすめ


コメント