Suffix Official Blogサフィックス公式ブログ

Scroll

スクロール問題を1行で鎮圧するCSS

Creative Member

こんにちは、WebチームのNです。最近CSSがすごく便利になってますね。
この前スクロール関連の問題に遭遇したのですが、難儀するかと思ったらCSSたった一行で解決できました。
この便利さを共有したいので、スクロール問題を1行で鎮めるCSSを紹介します。


【ページ内リンクにジャンプした時ヘッダーでコンテンツが隠れてしまう】

最近のWebページは下の方にスクロールしてもヘッダーがついてくるようになっているので、
ページ上部はヘッダーの分だけスペースを占領してるわけです。
ページ内リンクをクリックした時ブラウザはリンクが指定された要素をページの一番上に持ってくるので、
見出しにジャンプしたりするとちょうどヘッダーに隠れて見えない...ということが起きます。

▼サンプルページ。ヘッダーのメニューをクリックすると対応するセクションに飛べる。初期表示
そんな悩みを解決してくれるのがこれ
scroll-padding-top
このプロパティに設定した数値分だけページ内スクロールした時の高さがズレるので、
ヘッダーの高さ + 少々の余白をhtmlに指定すれば、
ページ内リンクをクリックした時に見出しが綺麗に表示されます!
▼HTMLhtmlコード
▼CSScssコード
▼設定なし:セクションBに飛んだ時、見出しBが見えない設定なし▼設定あり:セクションBに飛んだ時、見出しBが見える設定あり

これはスクロールコンテナというスクロール専用領域に対する設定なので、
ページ内リンクをクリックした時しか反映されません。
スクロール用の指定で見出しの上に変な余白ができている...なんてこともないので
安心して使えます!
もしページ全体ではなく特定のコンテンツにだけ適用したい時は
scroll-margin-topというプロパティが使えます。


【モバイルメニュー上でスワイプすると後ろのページがスクロールしてしまう】

上の例はページを作る人しか気にしなさそうですが、
これに関しては普段Webページを使う人も覚えがあるかもしれません。
モバイルメニューを閉じたら開く前と違う部分が表示されてる...というやつです。


▼メニュー内でスワイプ後に閉じると元の位置から動いている
123

そんな悩みを解決してくれるのがこれ
overscroll-behavior: contain
overflow-y:autoとセットなので実質2行ですが、
この2つをモバイルメニューを囲んでいる要素に設定すれば、
メニューを開いている間は後ろのページがスクロールされなくなります!

▼HTMLhtmlコード
▼CSScssコード

▼メニュー内でスワイプ後に閉じても元の位置のまま
123


ただしこのプロパティはスクロールできる要素でないと無効になってしまうので、
高さを1pxだけかさ増ししています。


【まとめ】

今までJavaScriptで調整しながら作っていたパーツが、
CSS一行で実装できるようになりました!
古いブラウザでなければ対応してるので、積極的に使っていきます。


参考サイト:
scroll-padding-top - CSS: カスケーディングスタイルシート | MDN
scroll-margin-top - CSS: カスケーディングスタイルシート | MDN
overscroll-behavior - CSS: カスケーディングスタイルシート | MDN

  1. TOP
  2. お知らせ
  3. ブログ
  4. スクロール問題を1行で鎮圧するCSS

PAGE TOP