はじめに
パララックス・追従ヘッダー・固定サイドバーに便利!
かつてはInternet Explorer(IE)非対応のため、position: sticky;
を使うにはポリフィルを入れるか、position: fixed;
で代用するしかありませんでした。
しかし、IEのサポートが終了した今、stickyは安心して使えるプロパティになっています。
この記事では、position: sticky;
の基本的な使い方や注意点を、デモとサンプルコード付きでわかりやすく解説していきます。
「fixedと何が違うの?」という方や、「stickyってまだ使ってないな…」という方も、この機会にぜひ活用してみてください!
position: sticky;
とは?
position: sticky;
は、日本語で「粘着的な位置指定」。
あるポイントまでスクロールされると要素が追従する挙動を実現できます。
▼ 特徴まとめ
-
スクロールに応じて動く点では
fixed
と似ている -
ただし、親要素の範囲内でしか固定されないのが大きな違い
-
top
・left
・right
・bottom
を使って粘着位置を指定
——
css
.sticky-box {
position: sticky;
top: 20px; /* スクロールで20pxの位置に達したら固定される */
}
上の例では、スクロールで .sticky-box
が top: 20px
の位置に来た時点から、その場に留まり続けます。ただし親要素の範囲内のみでの固定です。
position: fixed;
との違い
fixed
に似た動きをする sticky
ですが、次の点が大きな違いです:
① 追従の基準が異なる
●sticky→
「固定基準」・・・親要素
「動きの特徴」・・・指定位置に到達すると親要素内で貼りつく(相対位置)
●fixed→
「固定基準」・・・ブラウザウィンドウ
「動きの特徴」・・・常に画面の同じ位置に固定される(絶対位置)
→ sticky
は親要素の範囲内でのみ追従するため、親要素の下部で自動的に止まるのが特徴です。
② サイズとレイアウトが保たれる
fixed
は要素がフローから浮くため、幅や高さが失われることがありますが、sticky
は要素のサイズやレイアウトがそのまま保持されるため、デザインが崩れにくいというメリットがあります。
利用時の注意点
「stickyが効かない…」というときは、以下の項目を確認してみてください。
● 親要素に overflow
が指定されている
sticky
は、親・祖先要素に overflow: hidden
・scroll
・auto
があると機能しません。
基本的に overflow: visible
である必要があります。
● top
(または left
等)を指定していない
sticky
を使うには、貼りつき開始位置を必ず指定する必要があります。
● 親要素に高さがない
親要素に十分な高さがないと、スクロール領域が生まれず sticky
は機能しません。
親要素が sticky
要素のみの場合は、明示的に高さを設定する必要があります。