tbody要素のみをスクロールさせるためのHTMLとCSS

2024-04-02

HTMLテーブルの縦スクロール

HTML:

<table>
  <thead>
    <tr>
      <th>項目1</th>
      <th>項目2</th>
      <th>項目3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>データ1-1</td>
      <td>データ1-2</td>
      <td>データ1-3</td>
    </tr>
    <tr>
      <td>データ2-1</td>
      <td>データ2-2</td>
      <td>データ2-3</td>
    </tr>
    </tbody>
</table>

CSS:

table {
  width: 100%;
}

tbody {
  height: 200px; /* スクロール領域の高さ */
  overflow-y: auto; /* 縦スクロールバーを表示 */
}

ポイント

  • テーブル全体を100%幅にするには、table要素にwidth: 100%を指定します。
  • tbody要素のみをスクロールさせるには、tbody要素にheightoverflow-yを指定します。
  • heightプロパティは、スクロール領域の高さになります。
  • overflow-yプロパティはautoに設定することで、縦スクロールバーを表示します。

デモ

上記のコードを以下のようにHTMLファイルに記述し、ブラウザで開くと、テーブル全体が100%幅で表示され、tbody要素のみを縦スクロールできることが確認できます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>HTMLテーブルの縦スクロール</title>
  <style>
    table {
      width: 100%;
    }

    tbody {
      height: 200px;
      overflow-y: auto;
    }
  </style>
</head>
<body>
  <table>
    <thead>
      <tr>
        <th>項目1</th>
        <th>項目2</th>
        <th>項目3</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>データ1-1</td>
        <td>データ1-2</td>
        <td>データ1-3</td>
      </tr>
      <tr>
        <td>データ2-1</td>
        <td>データ2-2</td>
        <td>データ2-3</td>
      </tr>
      </tbody>
  </table>
</body>
</html>

補足

  • 上記のコードは基本的な例です。必要に応じて、デザインやレイアウトを調整してください。
  • thead要素やtfoot要素にもスクロールバーを表示したい場合は、それぞれの要素にheightoverflow-yを指定します。
  • より高度なスクロール機能を実装したい場合は、JavaScriptを使用する必要があります。
  • 本回答は2024年3月23日時点の情報に基づいています。



<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>HTMLテーブルの縦スクロール</title>
  <style>
    table {
      width: 100%;
      border-collapse: collapse;
    }

    th, td {
      border: 1px solid #ccc;
      padding: 5px;
    }

    tbody {
      height: 200px;
      overflow-y: auto;
    }
  </style>
</head>
<body>
  <table>
    <thead>
      <tr>
        <th>項目1</th>
        <th>項目2</th>
        <th>項目3</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>データ1-1</td>
        <td>データ1-2</td>
        <td>データ1-3</td>
      </tr>
      <tr>
        <td>データ2-1</td>
        <td>データ2-2</td>
        <td>データ2-3</td>
      </tr>
      <tr>
        <td>データ3-1</td>
        <td>データ3-2</td>
        <td>データ3-3</td>
      </tr>
      <tr>
        <td>データ4-1</td>
        <td>データ4-2</td>
        <td>データ4-3</td>
      </tr>
      <tr>
        <td>データ5-1</td>
        <td>データ5-2</td>
        <td>データ5-3</td>
      </tr>
    </tbody>
  </table>
</body>
</html>
  • 上記のコードは、以下の点を改善しています。
    • テーブルの罫線をborder-collapse: collapse;で消しています。
    • th要素とtd要素にスタイルを追加しています。
    • データ行を増やしています。

動作確認

上記のコードをHTMLファイルに記述し、ブラウザで開くと、以下のようになります。

  • テーブル全体が100%幅で表示されます。
  • tbody要素のみを縦スクロールできます。
  • 各列の幅は均等に表示されます。



HTMLテーブルの縦スクロール:その他の方法

方法1:overflow-x: auto; を使用

tbody要素にoverflow-x: auto;を追加することで、横スクロールバーを表示できます。

tbody {
  height: 200px;
  overflow-y: auto;
  overflow-x: auto;
}

方法2:position: sticky; を使用

thead要素にposition: sticky;を追加することで、ヘッダー行を固定できます。

thead {
  position: sticky;
  top: 0;
}

方法3:JavaScriptを使用

JavaScriptを使用して、より高度なスクロール機能を実装できます。

  • スクロールバーの位置を制御
  • スクロールイベントを処理
  • JavaScriptでテーブルのスクロールを実装する方法: URL JavaScript テーブル スクロール

上記以外にも、様々な方法があります。ご自身の環境や目的に合わせて、最適な方法を選択してください。


html css vertical-scrolling


HTMLメールデザインのベストプラクティス

テーブルレイアウトを使用する: HTMLメールでは、<table>要素を使用してレイアウトを構築するのが一般的です。これは、多くのメールクライアントが複雑なCSSレイアウトをサポートしていないためです。シンプルな構造にする: メールは、さまざまなデバイスやメールクライアントで表示される可能性があります。複雑な構造は、表示崩れの原因となる可能性があります。...


JavaScript、HTML、Canvasでキャンバスをクリアして再描画する方法

まず、HTMLファイルにCanvas要素を追加する必要があります。id属性は、JavaScriptからCanvas要素を取得するために使用されます。 widthとheight属性は、Canvas要素の幅と高さをピクセル単位で指定します。次に、JavaScriptファイルでCanvas要素を取得し、描画コンテキストを取得する必要があります。...


JavaScriptで動的にスタイルを適用:2つのクラスを持つ要素をカスタマイズする方法

この目的には、以下の3つの方法でCSSセレクターを使用できます。カンマ区切り複数のクラスセレクターをカンマで区切ると、そのすべてのクラスを持つ要素にスタイルが適用されます。上記の例では、buttonクラスとprimaryクラスを持つ要素は、白色のテキストになります。...


もう迷わない!CSSで特定の文字列を含むクラス名をスマートに操作

前方一致セレクタは、属性値が特定の文字列で始まる要素を選択するセレクタです。記法は以下の通りです。この場合、属性名 は一致させたい属性名、文字列 は一致させたい文字列の先頭部分を表します。例えば、すべての . icon- で始まるクラス名を持つ要素に赤い色を設定したい場合は、以下の CSS を記述します。...