Closed6

position sticky + overflow-y、stickyが効かなくなるのはなぜ?

mikannmikann

そもそもpositoin:stickyとは

mikannmikann
  • CSSのpotion: sticky;には、スティッキーアイテムとスティッキーコンテナという2つの主要部分が必要
  • スティッキーアイテム
    • potion: sticky;でスタイルを定義した要素
    • ビューポート(画面表示領域)における当該要素のポジションが定義したポジションと一致すると、フロートする
  • スティッキーコンテナ
    • スティッキーアイテムをラップするHTML要素
    • スティキーアイテムがフロートすることができる最大のエリアになる

https://coliss.com/articles/build-websites/operation/css/css-position-sticky-how-it-really-works.html

mikannmikann
mikannmikann
  • 何がscroll containerなのか
    • overflow-x, overflow-y, overflowのいずれかのプロパティが設定されていて且つ、それらの値がhidden, scroll, autoである要素はscroll container
    • htmlおよびbody要素のoverflow系プロパティの値をいじらなければviewportが暗黙的にscroll containerとなる
  • scroll containerとstickyの関係
    • position: sticky;が付与された要素は直近の祖先であるscroll containerのscrollportを基準にして張り付く仕様となっている
mikannmikann
  • 結論
    • overflow-yとstickyを安易に併用すると
    • viewport以外の要素が「直近の祖先であるscroll container」となり
    • 当初の想定とは異なる位置(viewport以外の要素を基準とした位置)にstickyitemが固定されてしまうため
    • stickyが効かない!となってしまう
このスクラップは2023/02/25にクローズされました