WEBサイトのページをスクロールした時、下の方にあったヘッダーメニューが画面外に行きそうになったら上部に固定されるようになる。
という挙動をするWEBサイトを見たことがあると思います。
という方へ、超簡単な実装方法をご紹介します。
実際にどういう動きをするか見てみたい方は株式会社LIGさんのホームページにも使われていますので、見に行ってみるといいですよ。(いつかサイトをリニューアルしてこの動きをしなくなる可能性もありますが・・・。)
記事の内容
- スクロール途中でヘッダーナビを上部に固定する方法
- このやり方を応用したテクニック
- ソースコードとプレビューを公開
やり方
固定したい要素にCSSでこのコードを当てるだけです。
position: sticky;
top: 0;
top や left などで位置を調整すれば、自分の好きな位置に配置することも可能です。
ソースコードと実際の動作のプレビュー
See the Pen position:stikey; by HIRO (@HIRO0714) on CodePen.
このように、画面から要素がはみ出る時になったら上部に固定されます。
<header>要素にposition:stickey;とtop:0; を設定してあるので、画面上部に固定となります。
他にこんな使い方も
See the Pen position:stickey3; by HIRO (@HIRO0714) on CodePen.
各boxにposition:sticky;を当て、上から順番にz-indexで重なり順を決めています。
このテクニックをうまく応用すれば、ちょっとしたCSSの記述でスタイリッシュな挙動をするサイトを作ることができます。
position:stikey;の仕様と注意点
position:stikey;を当てている要素の、親要素の中でしか機能しない
今回はナビゲーションを固定する方法の紹介なので簡単に説明しましたが、ただ単にposition:stickey;を当てれば上記のような挙動になるのではなくて、具体的に言うと、
position:stikey;が当てられた要素が、親要素の中で画面外にはみ出る時に画面固定になる。
ちょっと分かりにくいので、後述でプレビューを用意してあります。
position:stikey;を当てた要素の親要素が画面外に行くと、追従も解除されて親要素と共に画面外へいきます。
今回の説明での<header>要素の親は<body>になるので、どこまでもついてくるということになります。
文章では分かりにくいと思うので、プレビューで見てみましょう。
See the Pen position:stikey;-2 by HIRO (@HIRO0714) on CodePen.
ヘッダーナビに緑色のエリアで1つ親要素を追加しました。
スクロールしていくと分かるように、緑色のエリアが画面外へ行くまで追従になり、親要素が画面外に行くとヘッダーナビも一緒に画面外へ行きます。
そして上にスクロールして戻ると、本来のもとの位置に。
先祖要素にoverflowを使っていると動かない
position:stikey; を効かせている先祖要素に、overflowを効かせていると動きません。
これを知っていないとハマることになるので注意してください。
対応ブラウザ
2022年5月現在は、
- Chrome
- firefox
- edge
- safari
これらの主要ブラウザに全て対応するようになりました。(嬉しい!)
IEはサポート外です。
しかしIEは2022年6月頃にブラウザのサポート自体を終了になるので気にしなくて大丈夫です。
position:stikey;の最新ブラウザサポート状況はこちら>>
-
【IEは必須?】WEB制作でブラウザの動作チェックはどこまでやればいいのかを解説
WEB制作をしている時に、納品前に必ずやっておかなければならないのがブラウザの動作チェック。 そんな中で、 ブラウザチェックはどこまでやればいいのか? IE(Internet Explorer)の動作 ...
続きを見る
さらっとまとめ
position:sticky;を使えば、このようにスタイリッシュな挙動をするナビゲーションを作ることができます。
本来であればjavascriptを使って実装したりするところを、CSSのちょっとしたコードを打ち込むだけで実現可能なので非常に便利です。
これを使えばサイドバーがあるサイトを作った時に広告や重点的に見せたい部分だけ追従させることもできるので、ぜひこれを機にやってみてください。