position: stickyが効かない?使えない条件やposition: fixedとの違い。
公開日 :
- コーディング
こんにちは!
アンドエイチエーのコーディング部です。
本記事では、
position: sticky;
の意味position: sticky;
とposition: fixed;
の違いposition: sticky;
が使えない条件
をご紹介します。
目次
position: sticky; とは?
position: sticky;
とは、とある要素をスクロールした際に、指定した位置に貼り付ける(=スティッキー)ことのできる便利なCSSプロパティです。
position: sticky;
の要素が指定の位置を満たすとページの要素から”外れた”ような状態となるため、あたかも指定した位置で固定されたようになります。
position: fixed; の違い
position: sticky;
よく似ていると言われるCSSとして、position: fixed;
があります。
これら2つの違いは下記です。
position: fixed;
親要素に関係なく、画面全体上で決めた位置に固定される。position: sticky;
親要素内の決まった位置で固定される。
以下は、position: stick;
とposition: fixed;
の両方が適用されている例です。
スクロールしてみてください!
See the Pen fixed + sticky by bibomato (@bibomato) on CodePen.
position: sticky; が効かない条件
position: sticky;
が効かない条件として、overflow: hidden;
と一緒に使用する場合です。
以下は、position: sticky;
が効かない例です。
See the Pen fixed + sticky overflow hidden by bibomato (@bibomato) on CodePen.
使えない理由
これらはバグではありません。
簡単に言うと、position: sticky;
とoverflow: hidden;
は共存できないCSS同士だからです。
詳しく説明すると、親要素や祖先要素に対してoverflow: hidden;
を使うと、 position: sticky;
を付与している子要素が”無効化”されてしまいます。
もっと言えば、position: sticky;
の子要素は、スクロール可能な親要素に張り付く(親を軸に固定される)ような状態となりますが、overflow:hidden;
を使うと親要素がスクロールされない対象となるので、くっついている子要素は自分の今いる位置が正しいと判断し、固定してくれない状態になります。
解決方法は「 contain: paint; 」を使う
この解決方法として、overflow: hidden;
を使うのではなく、contain: paint;
を使います。
contain: paint;
を使うことで、要素の子要素を境界の外に表示させないようにできます。
以下は、contain: paint;
を使った場合の例です。
See the Pen fixed + sticky contain: paint by bibomato (@bibomato) on CodePen.
contain: paint;
のCSSプロパティに関する公式ドキュメントは、こちらからご覧いただけます。
最後に
いかがでしょうか?
この記事で、position:sticky;
についてより理解度が深まれば幸いです!
ぜひ、どんどん使ってみてください!
それではまた!