コーディング – 背面のスクロールを抑えたい

みなさんどうもこんにちは!
フロントエンドエンジニアのぽよです。
今回は、cssのoverscroll-behaviorが便利だよというお話です。
overscroll-behaviorって?
overscroll-behaviorは、スクロール可能なコンテンツが前後に重なっている時、
前面のコンテンツを端までスクロールしたあとの挙動を制御することが可能です。
どういうことかと言うと、
ハンバーガーメニューを開く
↓
最下部までスクロールする
↓
もっと下までスクロールしようとする
↓
ハンバーガーメニューを閉じる
↓
元々いた地点よりも下にいる
といったスクロールチェーンと呼ばれる、
背面コンテンツが意図せずスクロールされてしまう現象を防ぐことができます。
ちなみにですが、最新のプロパティ!ということではなく、
本当はchromeなどでは数年前からサポートされていましたが、
safariが対応していなかったので今まであまり実用的ではありませんでした。
しかし、2022年9月にリリースされたsafari 16から利用可能になったのです。
APIの設定ミスで、1週間で55万円の請求が!
公開ページと従量課金APIを直結したことで起きた費用事故から、上限・クォータ・監視の設計を整理します。
費用事故から学ぶAPI設計を見る値による違い
overscroll-behaviorの値には、auto contain noneの3つがあります。
初期値であるautoでは、これまで通りスクロールは伝達します。
背面のスクロールを抑えるにはcontainもしくはnoneを使用します。
この2つの差は何なのかというとオーバースクロールを有効にするか否かです。
オーバースクロールとは、
コンテンツ最上部でさらに上方向に動かした際にリロードが行われるあれのことです。
Pull-to-Refreshとも呼ばれています。
containではこの動作を有効にし、noneでは無効にします。
古い対応方法
これまではjsを使ってbodyにoverflow: hidden;を付与し、
safari用にposition: fixed;も付与していました。
でもそうすると最上部まで戻っちゃうからどうにかしなきゃ…
など、いろいろとやることがありました。
これからの対応方法
しかし、これからはcssを1行書くだけで解決できます。
overflowプロパティでautoもしくはscrollが指定された前面コンテンツに
overscroll-behaviorプロパティを指定するだけです。
注意点としては、
overflowプロパティが設定されていたとしてもスクロールバーが表示されない場合、
overscroll-behaviorプロパティは無視されてしまう点です。
前面コンテンツの中身が多くスクロールバーが表示される場合のみ適用されるということですね。
おわりに
overscroll-behaviorプロパティをサポートするブラウザが増えたことで、
煩雑だったスクロールチェーンの制御をシンプルに行なうことができるようになりました。
ハンバーガーメニューだけでなくモーダルウィンドウなどでも利用可能なので、
積極的に活用していきたいですね。
それではー。
編集部のおすすめAI活用でWeb制作会社に聞くべき3つの質問
AIを使っているかどうかを隠しながら進行していくストレスは互いに健全ではありません。Web制作会社に聞くべき重要な確認事項を、3つの質問として整理しました
Web制作会社のAI活用を見極める