HTMLのテーブルを画面サイズに合わせる方法

HTMLのテーブルを画面サイズに合わせる方法

HTMLテーブルを画面サイズに合わせる方法について説明します。
画面サイズに応じてテーブルの幅を調整することで、どのデバイスでも適切に表示されるようにすることが可能です。
以下に、基本的な方法をいくつか紹介します。

方法1: テーブルの幅を100%に設定する

テーブル全体の幅を100%に設定することで、親要素の幅に合わせてテーブルが伸縮します。
この方法は特にレスポンシブデザインで有効です。

HTMLファイル (index.html)
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Responsive Table</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <table id="test-table">
    <caption>Sample Table</caption>
    <thead>
      <tr>
        <th>Header 1</th>
        <th>Header 2</th>
        <th>Header 3</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Row 1, Cell 1</td>
        <td>Row 1, Cell 2</td>
        <td>Row 1, Cell 3</td>
      </tr>
      <tr>
        <td>Row 2, Cell 1</td>
        <td>Row 2, Cell 2</td>
        <td>Row 2, Cell 3</td>
      </tr>
    </tbody>
  </table>
</body>
</html>
CSSファイル (styles.css)
#test-table {
  width: 100%;
  border-collapse: collapse;
}

#test-table th, #test-table td {
  border: 1px solid #000;
  padding: 8px;
  text-align: left;
}

この例では、テーブルが親要素の幅に合わせて伸縮します。
親要素がウィンドウ全体の幅である場合、テーブルもウィンドウ全体に広がります。

方法2: テーブルにスクロール機能を追加する

画面幅が狭い場合でもテーブルを崩れさせずに表示するには、テーブル全体をスクロール可能にする方法もあります。
この方法では、テーブルの幅が画面幅を超えた場合にスクロールバーが表示されます。

HTMLファイル (index.html)
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Scrollable Table</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div id="test-table-container">
    <table id="test-table">
      <caption>Sample Table</caption>
      <thead>
        <tr>
          <th>Header 1</th>
          <th>Header 2</th>
          <th>Header 3</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Row 1, Cell 1</td>
          <td>Row 1, Cell 2</td>
          <td>Row 1, Cell 3</td>
        </tr>
        <tr>
          <td>Row 2, Cell 1</td>
          <td>Row 2, Cell 2</td>
          <td>Row 2, Cell 3</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>
</html>
CSSファイル (styles.css)
#test-table-container {
  width: 100%;
  overflow-x: auto;
}

#test-table {
  width: 100%;
  min-width: 600px;
  border-collapse: collapse;
}

#test-table th, #test-table td {
  border: 1px solid #000;
  padding: 8px;
  text-align: left;
}

この例では、test-table-containerというdivでテーブルを包み、その中にスクロール機能を追加しています。
min-widthを設定することで、テーブルの最低幅を指定し、それを超えるとスクロールバーが表示されるようになります。

方法3: メディアクエリを使ったレスポンシブデザイン

画面サイズに応じてテーブルのデザインを変更するために、メディアクエリを使用します。
例えば、小さな画面ではテーブルを縦に積み重ねる形式にすることが可能です。

HTMLファイル (index.html)
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Responsive Table with Media Queries</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <table id="test-table">
    <caption>Sample Table</caption>
    <thead>
      <tr>
        <th>Header 1</th>
        <th>Header 2</th>
        <th>Header 3</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Row 1, Cell 1</td>
        <td>Row 1, Cell 2</td>
        <td>Row 1, Cell 3</td>
      </tr>
      <tr>
        <td>Row 2, Cell 1</td>
        <td>Row 2, Cell 2</td>
        <td>Row 2, Cell 3</td>
      </tr>
    </tbody>
  </table>
</body>
</html>
CSSファイル (styles.css)
#test-table {
  width: 100%;
  border-collapse: collapse;
}

#test-table th, #test-table td {
  border: 1px solid #000;
  padding: 8px;
  text-align: left;
}

@media (max-width: 600px) {
  #test-table, #test-table thead, #test-table tbody, #test-table th, #test-table td, #test-table tr {
    display: block;
    width: 100%;
  }

  #test-table thead tr {
    display: none;
  }

  #test-table td {
    display: flex;
    justify-content: space-between;
    border: none;
    border-bottom: 1px solid #000;
  }

  #test-table td::before {
    content: attr(data-label);
    font-weight: bold;
  }
}

この例では、メディアクエリを使って画面幅が600px以下の場合、テーブルを縦に積み重ねて表示するようにします。
td要素にdata-label属性を追加し、これを::before疑似要素で表示することで、モバイル表示時でもデータの対応関係がわかりやすくなります。

これらの方法を組み合わせることで、さまざまなデバイスに対応した柔軟なテーブルデザインを実現できます。