ホームページ作成

tableレイアウトをCSSだけでレスポンシブ化する方法(3ページ目)

table要素で作られたテーブルレイアウトなウェブページを、CSSだけでレスポンシブ化する簡単な方法を解説。表のセルを作るtd要素に対してdisplayプロパティを使えば、HTMLソース上では表組みのまま、各セルを分離して再配置できます。画面サイズに応じて表の列数を2列や3列などに自動変化させる方法を、サンプルページと共にご紹介。

西村 文宏

執筆者:西村 文宏

ホームページ作成ガイド

HTMLのテーブルレイアウトが使われたページを、CSSだけで(表を崩して)レスポンシブ化する具体例

まずは、下図のようなテーブルレイアウトが組まれている場合を考えます。
 
HTMLで作られたテーブルレイアウトの表示例

HTMLで作られたテーブルレイアウトの表示例


このテーブルレイアウトを構成しているHTMLソースは、下記の通りです。colspan要素を使ってセルを横方向に結合したり、rowspan要素を使ってセルを縦方向に結合したりしています。

※詳しいソースは、後述のサンプルページでもご覧頂けます。
<table class="sample">
   <tr>
      <td colspan="3" class="headpane">■上部ペイン</td>
   </tr>
   <tr>
      <td rowspan="3" class="leftpane">■左端ペイン</td>
      <td             class="centerpane">■中央上部</td>
      <td rowspan="3" class="rightpane">■右端ペイン</td>
   </tr>
   <tr>
      <td class="centerpane">■中央2行目</td>
   </tr>
   <tr>
      <td class="centerpane">■中央3行目</td>
   </tr>
</table>
ここで装飾に使われているCSSは、以下の通りです。
table.sample {
   border: 1px solid black;
   border-collapse: collapse;
   width: 100%;
}
table.sample td {
   border: 1px solid black;
   padding: 1em;
   vertical-align: top;
}
.headpane   { background-color: #ffdddd; }
.leftpane   { background-color: #ccffcc; width: 27%; }
.rightpane  { background-color: #ccffcc; width: 27%; }
.centerpane { background-color: #ffffcc; }
上記のHTMLとCSSソースで、冒頭の画面イメージのように見えます。

表を表でなくすことで、レスポンシブ化するためのCSSソース:
さて、ここに、以下のようなCSSを加えます。
table.sample td {
   display: block;
   width: auto;
}
上記のソースでは、表のセルを構成するはずのtd要素に対して「display: block」を指定することで、ただのブロックレベル要素のように装飾しています。「width: auto」は、一部のセルの横幅を指定しているwidthプロパティを上書きして、横幅いっぱいに広げるための指定です。すると、表示は下図の右側のように変化します。
 
表を表でなくすCSSを追加することで、テーブルレイアウトを崩してレスポンシブ化しやすくできる

表を表でなくすCSSを追加することで、テーブルレイアウトを崩してレスポンシブ化しやすくできる


上図右側のように、表(テーブル)が表ではなくなりました。とても簡単です。実際にブラウザで表示を確認してみたい場合は、サンプルページ1をご覧下さい。

※displayプロパティの値を「table-cell」にすれば、元の表組みに戻ります。
 

列数の多い表をレスポンシブ化したい場合

さて、例えば1行あたり4列で構成されている表だと、横幅320pxで表示される小型スマートフォンでは1列あたり横幅80pxしか使えません。もし、表の各セルの中に横幅80pxを超える画像などがあれば、横スクロールが必須になってしまいます。商品リストなどの表ではありがちです。
 
幅の狭い画面だと、横方向の移動が必須になってしまうテーブルの例

幅の狭い画面だと、横方向の移動が必須になってしまうテーブルの例


このような表の列数(=横方向に並ぶセルの数)を、画面幅に合わせて自動的に増減できると便利です。例えば、横幅320pxのスマートフォンなら1列に表示するが、横幅600pxのタブレットなら2列で表示する、などです。そのような表示も、displayプロパティを使えば簡単に実現できます。

最後に、「表のように見せつつ、列数を画面幅に合わせて自動変化させる」という、列数の多い表をレスポンシブ化する方法をご紹介いたします。
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます