要素をCSSの位置に固定する方法:スティッキー
序章
過去にrelative
およびabsolute
の値でCSSposition
プロパティを使用したことがあるかもしれません。 最新のWebブラウザーは、sticky
値をサポートするようになりました。 スクロールが特定のポイントに達したときに要素を固定することができます。
position: sticky
の要素は、指定されたポイントに到達するまでは比較的配置された要素のように動作し、その後、静的に配置された要素のように動作し始めます。
この記事では、position: sticky
を使用して、その動作と機能を理解する例を作成します。
前提条件
この記事をフォローしたい場合は、次のものが必要になります。
- CSSプロパティと値の理解。
- コードエディタ。
position: sticky
をサポートする最新のWebブラウザ。
position: sticky
を使用する
フレックスコンテナとなるdiv
コンテナについて考えてみます。 内部にネストされるのは、フレックスアイテムとなる4つの追加のdiv
要素です。 4つのdiv
要素には、shark-1
、shark-2
、shark-3
、およびshark-4
の画像が含まれます。
コードエディタで、次のマークアップを使用します。
<div class="container"> <div class="item shark-1"> <img src="/images/punk.png" width="100" alt="Sammy the Shark with a punk theme." > </div> <div class="item shark-2"> <img src="/images/pony.png" width="100" alt="Sammy the Shark with a magical pony theme." > </div> <div class="item shark-3"> <img src="/images/dino.png" width="100" alt="Sammy the Shark with a dinosaur theme." > </div> <div class="item shark-4"> <img src="/images/steampunk.png" width="100" alt="Sammy the Shark with a steampunk theme." > </div> </div>
そして、次のスタイルを追加します。
.container { display: flex; justify-content: space-around; align-items: flex-start; border: 2px dashed rgba(114, 186, 94, 0.35); height: 400px; background: rgba(114, 186, 94, 0.05); } .shark-1 { position: sticky; top: 0; } .shark-2 { position: sticky; top: 4rem; } .shark-3 { position: sticky; bottom: 1rem; align-self: flex-end; }
この例では、フレックスコンテナのalign-items: flex-start
ルールが重要です。そうしないと、フレックスアイテムのデフォルト値がstretch
になり、要素がコンテナの高さ全体を占めるため、スティッキー効果がキャンセルされます。
注:さまざまなフレックスボックスのプロパティと値の復習が必要な場合は、フレックスボックス入門書を確認してください。
このファイルを保存して、最新のWebブラウザーで開きます。
上下にスクロールして、sticky
の動作を観察します。 スティッキーに配置された要素が、親要素内でのみスティッキーであることに注意してください。
警告:position: sticky
要素が意図したとおりにウィンドウに貼り付けられない2つの一般的なシナリオがあります。
はめ込みプロパティが定義されていません。スティッキー要素にtop
またはbottom
が設定されていることを確認してください。 または、水平スクロールの場合は、left
またはright
。
要素の祖先の1つに互換性のないoverflow
があります:スティッキー要素の親または祖先のいずれかでoverflow
がhidden
、scroll
、または[ X163X]。 これは、overflow-x
およびoverflow-y
にも当てはまります。
1番目と2番目のサメは、ビューポートによって確立された収容ブロックのtopに対して粘着性があります。 3番目のサメは、ビューポートによって確立された包含ブロックの下部に対して粘着性があります。 4番目のサメはposition: sticky
が割り当てられていないため、スティッキーな位置にスクロールしません。
結論
この記事では、position: sticky
を使用して、その動作と機能を理解する例を作成しました。
2020年の時点で、95% ofブラウザはposition: sticky
をある程度サポートしています。 詳細については、 CSSの位置を使用できますか:stickyを参照してください。 古いバージョンのSafariには、-webkit
ベンダープレフィックスが必要です。 Webアプリケーションに組み込む前に、ターゲットオーディエンスがこの機能を利用できることを確認してください。
CSSの詳細については、CSSトピックページで演習とプログラミングプロジェクトを確認してください。