見出しセル(th
)をposition: sticky
で固定して、テーブルレイアウトのレスポンシブ対応をしようという記事です。
HafHというウェブサイトの下記ページ「プラン比較」の部分にインスパイアを受けました。これをテーブルレイアウトでできないものかと思い、本記事を書いています。
目次
書いたコード
以下はCodePenのリンクです。
See the Pen responsive table layout by itsumoonazicode (@itsumoonazicode) on CodePen.
本記事で作成するテーブルレイアウト
今回は以下のようなレイアウトをつくります。
- テーブル全体が横スクロールする
- tbody内の見出しセルのみ位置固定
テーブル全体を横スクロールさせる
画面幅の狭いデバイス向けに、テーブルを横スクロール可能にします。
.table { display: block; overflow-x: scroll; white-space: nowrap; }
tbody内の見出しセルの位置を固定する
横スクロールしたときに、特定のセルのみ常に同じ位置に置けるようにします。今回は、tbody内の見出しセルがその対象になります。
.table tbody th { display: block; position: sticky; left: 0; }
本レイアウトをつくる上で困ったこと
position: sticky
を設定したセルの横幅と、他のセルの横幅が連動してしまう
position: sticky
を設定したセルの横幅と、他のセルの横幅が連動してしまう
下記は未解決です。。
もともと、以下のようなCSSを設定していました。しかしながらこれだと、1列目は見出しセル以外のセルも同じ長さになってしまいます。表示は崩れてこそいませんが、他セルに横幅の影響が及んでほしくありません。
.table tbody th { width: calc(100vw - 16px); }
おわりに
見出しセルをposition: sticky
で固定して、テーブルレイアウトのレスポンシブ対応をしてみました。実務で使うには、スタイルをちゃんと設定しないといけないですが、ひとまず最小限の形にはできたんじゃないかと思います。