CSS position:5つの値を1つのライブデモで

CSS positionガイド

CSS position:static、relative、absolute、fixed、stickyのデモ | We.Inc

スクロールするデモの中で、1つの要素をstatic、relative、absolute、fixed、stickyに切り替えられます。包含ブロック、inset、stickyが効かないときの対処法、中央寄せも解説します。

positionプロパティは、要素をどのように配置するかを決めます。staticは通常の流れです。relativeは元の場所を確保したまま少しずらします。absoluteは要素を流れから外し、最も近い位置指定された祖先を基準に配置します。fixedはビューポートに固定します。stickyは、top: 0のようなしきい値に達するまで普通にスクロールし、そこで留まります。

5つの値

下のデモでは、スクロールできる領域の中にオレンジ色のボックスが1つあります。position の値を切り替え、オフセットを動かし、スクロールして、何を基準に配置されているかを観察してください。続いて、包含ブロックの解説、stickyが効かないときのチェックリスト、insetショートハンドを紹介します。

よくある質問

absolute(絶対配置)とrelative(相対配置)の違いは何ですか?

相対配置は要素を見た目の上でずらしますが、レイアウト上の元の場所は残るので、周りは何も動きません。絶対配置は要素をレイアウトから完全に取り除き、隣の要素がその隙間を詰めます。オフセットは、本来あったはずの場所ではなく、最も近い位置指定された祖先を基準に測られます。

position: stickyが効かないのはなぜですか?

よくある原因は、上端のしきい値がない、祖先にスクロールを隠すか自動にするoverflow指定がある、親の高さがsticky要素と変わらない、のいずれかです。このページのチェックリストを順に確認してください。最初の2項目でほとんどのケースが見つかります。

絶対配置の要素は何を基準に配置されますか?

包含ブロックです。つまり、positionがstatic以外である最も近い祖先のパディングボックスです。transform、filter、特定のcontainの値を持つ祖先も該当します。どれもなければ、ビューポートと同じ大きさの初期包含ブロックが基準になります。

固定ヘッダーがページと一緒に動いてしまうのはなぜですか?

祖先にtransform、perspective、filter、backdrop-filter、will-change: transform、contain: paintのいずれかがあります。これらはどれも、その祖先を固定配置の子孫の包含ブロックにしてしまうため、ヘッダーは画面ではなくその祖先に固定されます。

CSSのinsetとは何ですか?

上下左右4方向のオフセットをまとめたショートハンドで、marginと同じく1〜4個の値のパターンに従います。inset: 0は、位置指定された要素を包含ブロック全体に広げます。inset-inlineとinset-blockは、それぞれの軸の組を設定します。

包含ブロックをわかりやすく

絶対配置で中央に寄せる

各値の詳細

positionの値

絶対配置と固定配置の包含ブロックを作るもの

位置指定された子孫を捕まえる祖先(MDNによる)

よく使うパターン

カードの角に付けるバッジ

カードが位置指定された祖先です。負のオフセットで、バッジを角から半分はみ出させます。

表の固定ヘッダー

ラッパーがスクロールするので、top: 0のthはラッパーに貼り付きます。背景色を付けて、行が透けて見えないようにしています。

insetショートハンド

marginと同じパターンです。値が1つなら全辺、2つなら上下と左右、4つなら上から時計回りです。

position プレイグラウンド

position の値

親にposition: relativeを付ける

オフセットは無視されます。ボックスは段落の間で通常の流れに沿って配置されます。

ボックスはずれて描画されますが、本来あった場所の隙間は残ります。隣の要素は動きません。

position: relativeを持つ、破線の親を基準に測られます。

位置指定された親がないため、一つ上の位置指定された祖先である、スクロールするデモ領域を基準に測られます。

スクロールしてもデモの枠に固定されます。枠にtransformがあるため、ブラウザーのウィンドウではなく枠が包含ブロックになっています。

スクローラーの上端から指定したピクセル数の位置に達するまで文章と一緒にスクロールし、その後は親が去るまで留まります。

スクロールできるデモ領域

この枠の中をスクロールしてください。スクロールして通り過ぎる対象として、ダミーの文章を入れています。

親

ボックスの前にある最初の段落です。

ボックスの後の段落です。ボックスが流れから外れたときに、この段落が上に詰まるかを見てください。

スクロール用の追加コンテンツ {n} 行目です。

親の後のコンテンツ、{n} 行目です。

CSSをコピー

固定配置が枠内に留まる理由:枠にtransform: translateZ(0)が付いているからです。どんなtransformでも、その要素は固定配置の子孫の包含ブロックになります。そのような祖先がない実際のページでは、固定配置の要素はブラウザーのウィンドウに固定されます。

stickyが効かないときのチェックリスト

固定ヘッダーがほかのコンテンツの後ろに隠れてしまう場合はこちら:

z-indexとスタッキングコンテキスト

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る