fixedはもう古い?ヘッダーやフッターを固定表示する方法

WebCSS,HTML

努力 未来 A BEAUTIFUL STAR、その名も「position: sticky」!!

stickyの英単語としての意味は、「粘着性のある」「ねばねばした」。

その名の通り、「position: sticky」は表示領域の任意の位置に要素を粘着させることができます。

ブラウザ対応は?

Can I use…
https://caniuse.com/?search=position%3Asticky

IE以外のモダンブラウザでは対応済み、Globalの対応率も96%と大きな問題はなさそうです。(2022年10月現在)

使ってみよう!

百聞は一見に如かずということで、さっそく下記のコードを試していただきたいと思います。

// header固定
position: sticky;
top: 0;
z-index: 1;// (必要に応じて)

// footer固定
position: sticky;
bottom: 0;
z-index: 1;// (必要に応じて)

たったこれだけのコードで、要素を固定表示にすることができます。

fixedとの違いは?

要素の高さが消失しない(floatしない)

fixedのときには、ヘッダー、フッターの高さ分paddingをつけるなんてことをしていましたが、それが必要なくなりました!

レスポンシブ対応や要素量で高さの変わってしまうヘッダーでもJavaScriptを使わなくて済みます。

要素の幅が消失しない

fixedのときには、「display: block」の状態でも「width: 100%」の指定が必要でしたが、これも必要なくなりました!

「position: sticky」ではdisplayの状態がきちんと反映され、inline、inline-blockのときにはコンテンツの最小幅、blockのときには親要素の幅になってくれます。

絶対位置の指定にならない

先ほどのコードでフッターの固定位置を「bottom: 0」→「top: 0」にするとわかりやすいのですが、なんと画面上部に固定されないのです。
stickyではあくまで「粘着」するだけなので、ページ上の要素の位置はそのままとなります。

試しにフッターのさらに下に、高さが120vhのdivを置いてみましょう。
フッターがスクロールされて画面上部(top:0)に到達したとき、その場所で粘着しているのがわかると思います。
※他の要素も固定しているときには、その要素に積み重なるようにして粘着します

もっと詳しい仕様について

CSS Positioned Layout Module Level 3 – W3C WD
https://w3c.github.io/csswg-drafts/css-position-3/#sticky-pos

テキストベースで難しい表現になっていますが、こちらが仕様のすべてです。

高度な使い方

airbnb
https://www.airbnb.jp/rooms/34113796

Zenn
https://zenn.dev/

Qiita
https://qiita.com/

上記3サイトの(2022年10月時点の)レイアウトでは、サイドバーが画面上部に到達したときに粘着するようになっています。
これらも「position: sticky」によるものです!

おしまい

CSS3のプロパティには、ブラウザでの対応待ちのものも多くあります。

Can I use… などを通して対応状況を確認してから使用しましょう。

 

それではいつものいきます、

そんな株式会社アルタがお届けするソリューションが気になる方は…

Posted by Neon