[CSS]レスポンシブ対応のテーブルを実装するシンプルで、賢いアイデア
Post on:2016年10月11日
Webページをレスポンシブ対応にする時、悩ましいコンテンツの一つがテーブルではないでしょうか。単にセルの幅を狭くするだけでは、一行に一文字しかない妙に縦長なテーブルになってしまいます。
省略したり、プルダウンを利用したりなどいろいろなアイデアがありますが、もっとシンプルで簡単に、そして実用的な賢い実装アイデアを紹介します。
レスポンシブ対応のテーブルのデモ
デモでは4x5のテーブルで、さまざまなデバイスのスクリーンサイズでコンテンツが最適になるよう実装されています。
Simple Responsive Table in CSS: 幅1,200pxで表示
Simple Responsive Table in CSS: 幅800pxで表示
Simple Responsive Table in CSS: 幅480pxで表示
レスポンシブ対応のテーブルの実装
まずは、通常のテーブルの実装を確認しておきましょう。
HTML
テーブルの実装はごく普通で、4つのカラムを持っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<table> <caption>Statement Summary</caption> <thead> <tr> <th scope="col">Account</th> <th scope="col">Due Date</th> <th scope="col">Amount</th> <th scope="col">Period</th> </tr> </thead> <tbody> <tr> <td scope="row">Visa - 3412</td> <td>04/01/2016</td> <td>$1,190</td> <td>03/01/2016 - 03/31/2016</td> </tr> </tbody> </table> |
CSS
各セルの区切りは、水平に1pxのラインをいれ、垂直のラインはありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
table { border: 1px solid #ccc; border-collapse: collapse; margin: 0; padding: 0; table-layout: fixed; width: 100%; } table tr { background: #f8f8f8; border: 1px solid #ddd; padding: .35em; } table th, table td { padding: .625em; text-align: center; } |
HTML: レスポンシブ対応
各セルに「aria-label」を加えます。
レスポンシブ対応のレイアウトのために使用しますが、「aria-label」はアクセシビリティにももちろん有益です。
1 2 3 4 |
<td scope="row" aria-label="Account">Visa - 3412</td> <td aria-label="Due Date">04/01/2016</td> <td aria-label="Amount">$1,190</td> <td aria-label="Period">03/01/2016 - 03/31/2016</td> |
CSS: レスポンシブ対応
600px以下のスクリーンでは、trとtdはテーブルの行とセルとしてではなく、ブロックレベルとして機能するように指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@media screen and (max-width: 600px) { table thead { display: none; } table tr { border-bottom: 3px solid #ddd; display: block; } table td { border-bottom: 1px solid #ddd; display: block; text-align: right; } table td:before { content: attr(aria-label); float: left; } } |
600px以下のスクリーンでは、下記のように各行ごとに一つのブロックになり、積み重なって表示されます。
Simple Responsive Table in CSS: 幅480pxで表示
sponsors