HTMLのテーブルレイアウトが使われたページを、CSSだけで(表を崩して)レスポンシブ化する具体例
まずは、下図のようなテーブルレイアウトが組まれている場合を考えます。このテーブルレイアウトを構成している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プロパティを上書きして、横幅いっぱいに広げるための指定です。すると、表示は下図の右側のように変化します。上図右側のように、表(テーブル)が表ではなくなりました。とても簡単です。実際にブラウザで表示を確認してみたい場合は、サンプルページ1をご覧下さい。
※displayプロパティの値を「table-cell」にすれば、元の表組みに戻ります。
列数の多い表をレスポンシブ化したい場合
さて、例えば1行あたり4列で構成されている表だと、横幅320pxで表示される小型スマートフォンでは1列あたり横幅80pxしか使えません。もし、表の各セルの中に横幅80pxを超える画像などがあれば、横スクロールが必須になってしまいます。商品リストなどの表ではありがちです。このような表の列数(=横方向に並ぶセルの数)を、画面幅に合わせて自動的に増減できると便利です。例えば、横幅320pxのスマートフォンなら1列に表示するが、横幅600pxのタブレットなら2列で表示する、などです。そのような表示も、displayプロパティを使えば簡単に実現できます。
最後に、「表のように見せつつ、列数を画面幅に合わせて自動変化させる」という、列数の多い表をレスポンシブ化する方法をご紹介いたします。










