表をかっこよくスクロール可能にするテクニックについてのResponsive scrollable tablesという記事を読んだ。この記事ではJavaScriptで表をdiv
要素で括って、それから溢れたらスクロールバーを表示(+α)という形でやっている。これをいじってて気づいたんだけど、JavaScriptで追加マークアップをする代わりにtable
要素のdisplay
プロパティーをいじってやると簡単にスクロール可能な表になるようだ。
Demo: Scrollable Table
表を自動幅調整なし(幅固定)にするにはtable-layout
プロパティーを、各セルで折り返しなしにするにはwhite-space
プロパティーをそれぞれ使う。それとdisplay: block
を組み合わせると、pre
要素で文字がはみ出す時にスクロールさせるような感じになる。
table {
display: block;
max-width: 100%;
overflow-x: auto;
table-layout: fixed;
}
th,
td {
white-space: nowrap;
}
スクリーン・リーダーがdisplay: block
な表をどう解釈するか微妙な感じがあるけど、こっちの方がお手軽。表じゃなくなるのでborder-collapse
プロパティー等に影響があるけど、子のtd
要素等にはその影響は波及しないのであまり問題もなさそう。
スクロールバーが、表の大きさ的な理由で気づかない、またはブラウザーのUI的な理由で見えないことが多いので、パッと見て横にはみ出してスクロールすると全部見える表なのかどうかがわかりづらい。ウェブページは横にはみ出さないもの的な先入観を持つ人も多いしそれで普通だと思うので、表の表示の仕方としては適切ではない気もする。元記事の実装のようにはみ出したら影というような補助が必要で、そうできればすごく良さそうだけどCSSだけでは難しそう。