テーブル見出しを固定してください
(btxx.org)テーブル見出しを固定してください
- Web上では大きなデータセットやテーブルレイアウトをよく扱う。
- 数百行あるテーブルでスクロールを始めると問題が発生する。
- テーブルヘッダーが見えなくなると、ユーザーは各列が何に対応しているのかを覚えておくのが難しい。
固定ヘッダー
- 固定ヘッダーは魔法のように見えるが、実装はとても簡単。
theadにたった2つのCSSプロパティを追加するだけでよい:position: sticky;top: 0;
- 世界全体で約96%のサポート率を持つ
stickyは、多くのブラウザーで安定して利用できる。 - ユーザー体験の向上にも役立つ。
GN⁺の意見
- Webサイトで大きなテーブルを扱うとき、ユーザーがスクロールしてもテーブルの見出しを簡単に確認できるようにすることは、ユーザー体験を大きく向上させる。
- CSSの
position: sticky;プロパティを使って簡単にテーブルヘッダーを固定できることは、Web開発者にとって有用な情報である。 - この機能は広くサポートされているため、Web開発者はさまざまなブラウザーで安定して実装できることがわかる。
1件のコメント
Hacker Newsのコメント
position: sticky;を使ってテーブルヘッダーを固定するのは簡単そうに見えるが、テーブル内容に何らかの処理を加えると問題が起きる。たとえば、ユーザーがテーブルをスクロールし、ページを離れてから戻ったときにスクロール位置を復元する機能を追加したところ、復元された位置が常に1行下にずれていた。透明なテーブルヘッダー越しに見ると、目的の行は最上部にあるが、ヘッダーが重なっているため次の行が最初に見える。スクロール位置をヘッダーの高さを考慮して調整すると最初はうまく動くが、ときどき数ピクセルずれる。これはテーブルが大きいためスクロールイベントに応じて遅延読み込みを行っており、さらに自動テーブルレイアウトを使っているので、ときどきヘッダーセルの幅が狭くなりすぎて単語が折り返され、ヘッダー全体の高さが増えるためだ。最終的な解決策は、ヘッダー要素にResizeObserverを作成し、高さが変わるたびにスクロール位置を動的に調整することだった。ResizeObserverドキュメント<th>タグを使うという追加の手間をかけるなら、それが望む挙動である可能性が高い。<thead>と<tr>要素でposition: stickyプロパティを使えないようにしていた: Chromium issue linktopを境界線を考慮して設定すると(たとえば -1px ではなく 0)、テーブル本体がヘッダーの上に流れ込むのを防げる。2つのCodePenの例を比較している: 既存のCodePen と 改善版のCodePen