スクロール問題を1行で鎮圧するCSS
Creative Member WEBチーム
こんにちは、WebチームのNです。最近CSSがすごく便利になってますね。
この前スクロール関連の問題に遭遇したのですが、難儀するかと思ったらCSSたった一行で解決できました。
この便利さを共有したいので、スクロール問題を1行で鎮めるCSSを紹介します。
【ページ内リンクにジャンプした時ヘッダーでコンテンツが隠れてしまう】
最近のWebページは下の方にスクロールしてもヘッダーがついてくるようになっているので、
ページ上部はヘッダーの分だけスペースを占領してるわけです。
ページ内リンクをクリックした時ブラウザはリンクが指定された要素をページの一番上に持ってくるので、
見出しにジャンプしたりするとちょうどヘッダーに隠れて見えない...ということが起きます。

scroll-padding-topこのプロパティに設定した数値分だけページ内スクロールした時の高さがズレるので、
ヘッダーの高さ + 少々の余白を
htmlに指定すれば、ページ内リンクをクリックした時に見出しが綺麗に表示されます!


▼設定あり:セクションBに飛んだ時、見出しBが見える
これはスクロールコンテナというスクロール専用領域に対する設定なので、
ページ内リンクをクリックした時しか反映されません。
スクロール用の指定で見出しの上に変な余白ができている...なんてこともないので
安心して使えます!
もしページ全体ではなく特定のコンテンツにだけ適用したい時は
scroll-margin-topというプロパティが使えます。
【モバイルメニュー上でスワイプすると後ろのページがスクロールしてしまう】
上の例はページを作る人しか気にしなさそうですが、
これに関しては普段Webページを使う人も覚えがあるかもしれません。
モバイルメニューを閉じたら開く前と違う部分が表示されてる...というやつです。
▶
▶
そんな悩みを解決してくれるのがこれ
overscroll-behavior: contain
overflow-y:autoとセットなので実質2行ですが、
この2つをモバイルメニューを囲んでいる要素に設定すれば、
メニューを開いている間は後ろのページがスクロールされなくなります!


▶
▶
ただしこのプロパティはスクロールできる要素でないと無効になってしまうので、
高さを1pxだけかさ増ししています。
【まとめ】
今までJavaScriptで調整しながら作っていたパーツが、CSS一行で実装できるようになりました!
古いブラウザでなければ対応してるので、積極的に使っていきます。
参考サイト:
scroll-padding-top - CSS: カスケーディングスタイルシート | MDN
scroll-margin-top - CSS: カスケーディングスタイルシート | MDN
overscroll-behavior - CSS: カスケーディングスタイルシート | MDN