2023-07-12 投稿

【CSS】position stickyが効かないときの対処法

position stickyは、それを指定した要素だけでなく「親」や「祖先」の要素によって挙動が左右されることがあります。

position: sticky; とは?

position: sticky; は、一部の要素だけを固定することができる比較的新しいCSSプロパティです。

position: fixed; との違いは、fixedを指定した要素を常に画面に対して固定位置に表示するのに対し、
position: stickyを指定した要素を、その「ひとつ親の要素」が画面にスクロールされている間だけ、固定する というものです。

エクセルやスプレッドシートの「行を固定」のようなことをしたい場合に役立ちます。

position sticky鉄則

十分なスクロール量を用意する。

そもそも、画面をスクロールするほどコンテンツが長くなければ、stickyは役に立ちません。
position: stickyを付与したの要素が、トップまで辿り着いてからすべて隠れてしまうまでの間、stickyの要素が固定されるので、
親要素がすべて隠れてしまう位の十分なスクロール量があることが必要です。

固定したい要素にstickyと、位置を指定する。

固定したい要素にposition: sticky;をつけ、さらに
top: 10px;など固定したい位置も忘れずに指定します。

「祖先の要素」にoverflow: hiddenや、overflow: scrollが指定されていないことを確認する。

要素がたくさん重なるページでは、祖先の要素(例えばbody要素も)にoverflowの指定することもありえます。
親だけでなく祖先にこれがあるとposition: stickyは動きません。どうしても固定されない時は、エディタの検索で
overflow: hiddenやoverflow: scrollがないか探してみましょう。私はこれで2時間は潰しました。