Sticky positioning
position: sticky は relative と fixed のハイブリッドで、通常のフローに従いつつスクロール位置が閾値を超えると固定される。従来 JavaScript で実装していた固定ヘッダーやサイドバーナビゲーションを CSS のみで実現できる。top, bottom, left, right で吸着位置を指定する。
概要
position: sticky は relative と fixed のハイブリッドで、通常のフローに従いつつスクロール位置が閾値を超えると固定される。従来 JavaScript で実装していた固定ヘッダーやサイドバーナビゲーションを CSS のみで実現できる。top, bottom, left, right で吸着位置を指定する。
対応ブラウザ
デスクトップ
Chrome 56+
Edge 16+
Safari 13+
Firefox 59+
モバイル
Chrome Android 56+
Safari iOS 13+
Firefox Android 59+
基本構文
CSS
.sticky-header {
position: sticky;
top: 0;
z-index: 10;
background: white;
}
/* テーブルヘッダーの固定 */
thead th {
position: sticky;
top: 0;
} 実務での使いどころ
-
固定ヘッダー・ナビゲーション
ページスクロール時にヘッダーが画面上部に固定され、常にナビゲーションにアクセスできる。
-
テーブルヘッダーの固定
長いデータテーブルのヘッダー行を固定し、大量のデータをスクロールしてもカラム名が常に見える状態にする。
注意点
- 親要素に overflow: hidden, auto, scroll が設定されていると sticky が機能しない場合がある。
- sticky 要素の包含ブロック(親要素)の範囲外にはスクロールされないため、親のサイズに注意が必要。
アクセシビリティ
- 固定ヘッダーがコンテンツを隠さないよう、十分な余白やスクロールマージンを確保する。scroll-padding-top の活用が推奨される。