ポジショニングとz-index

商品写真の右上隅に小さな「セール」バッジを配置したい。ページをスクロールするとその下を通る固定ヘッダーが欲しい。ページ上の他のすべてのものの上に浮かぶダイアログが必要だ。通常の CSS のスペーシングではこれらのいずれもできません。なぜなら、それは要素を次々と一列に配置するだけだからです。ポジショニングは、要素が通常の配置から抜け出し、指示した場所に正確に配置できるツールのセットです。他のものの上にも配置できます。
position プロパティ
すべての要素は**静的ポジショニング**で始まります。これは「ページの流れ内の通常の場所に座る」という単純な言い方です。これがデフォルトであり、ほとんどの場合、これが必要なものです。ポジショニングは、要素をその通常の場所から移動させたい場合に重要になります。
次のステップは position: relative です。これは4つのオフセットプロパティ top、right、bottom、left を使用して、要素を通常の場所から移動させます。重要なのは、要素が元のスペースを保持することです。他に何も隙間を埋めるために移動しません。
.badge {
position: relative;
top: 10px; /* 通常の場所から下に10px押される */
left: 20px; /* 通常の場所から右に20px押される */
}これらの top と left オフセットは、static 要素ではまったく機能しません。static 以外の position を要素に指定してから機能し始めます。
static として始まり、通常の場所に座ります。position: relative に切り替えると、top、right、bottom、left で微調整でき、元のスペースは予約されたままです。これらのオフセットプロパティは要素が位置指定されるまで機能しないため、top が無視されるように見える場合は、最初に position を設定したことを確認してください。 絶対ポジショニング
position: absolute はより大きな動きです。要素を通常のフローから完全に持ち上げるため、もはやスペースを占めず、その周囲の要素は、それが存在したことがないかのように縮まります。次に、同じ top、right、bottom、left オフセットを使用して配置します。
質問は次のとおりです。何に対するオフセットでしょうか?絶対要素は、最も近い**位置指定された祖先**(static 以外の position を持つ最も近い親)に対して自身を配置します。これが、バッジオンカードパターンが常にペアで来る理由です。カードを relative にして参照ポイントにし、次にバッジを absolute にしてカードの隅に配置できるようにします。
.card {
position: relative; /* 参照ポイントになる */
}
.card .badge {
position: absolute;
top: 8px; /* カードの上から8px */
right: 8px; /* カードの右から8px */
}カードに position: relative がない場合、バッジはページをさらに上まで位置指定された祖先を探し、意図していない場所に着陸します。
position: absolute は要素をフローから引き出すため、スペースを占めず、隣人がその後ろに閉じ込められます。その後、position が設定されている最も近い親に対して配置されます。これが、バッジオンカードのトリックがペアである理由です。カードに relative、バッジに absolute なので、バッジはカードの隅に着陸し、どこかランダムな場所ではなく。 固定と粘性
position: fixed は要素をスクリーン自体に固定します。これは absolute と同様にフローを離れますが、親に固定するのではなく、ビューポート(表示される窓)に固定されます。固定されると、ページをスクロールしても画面上の同じ場所に留まります。これが、ナビゲーションバーまたは「トップに戻る」ボタンが常に表示されている方法です。
.site-header {
position: fixed;
top: 0; /* ウィンドウの上部に固定 */
left: 0;
right: 0; /* 全幅に拡張 */
}position: sticky は優しい中間地点です。粘性要素は通常ページと一緒にスクロールしますが、設定した閾値に達すると、所定の位置に粘着します。セクションの見出しがそのコンテンツと一緒にスクロールアップしてから、画面の上部で保持されるのは典型的な例です。
.section-title {
position: sticky;
top: 0; /* 上端に達すると粘着 */
}position: fixed は要素を画面に固定するため、スクロール時に所定の位置に留まります。これは、ヘッダーまたはトップへのボタンが周りに留まっている方法です。position: sticky は中間地点です。ページと一緒にスクロールしてから、top: 0 のような閾値に粘着します。固定はそれの下にあるものと重なるため、カバーするコンテンツのために何らかのスペースを残してください。 z-indexでスタック
要素が重なるとき、何がトップに座るかを決めるものが必要です。これが z-index が制御するものです。より高い z-index は低いものの前に描かれるため、z-index: 10 のドロップダウンは z-index: 1 のカードをカバーします。
1つのルールは誰もつまずきます。z-index は位置指定された要素でのみ機能します。要素がまだ static の場合、その z-index は無視されます。そのため、ほぼ常に position と z-index を一緒に設定します。
.modal {
position: fixed;
z-index: 100; /* 通常のページコンテンツの上に座る */
}
.modal-overlay {
position: fixed;
z-index: 99; /* ダークバックドロップ、モーダルの1ステップ後ろ */
}通常、ここで大きな数値は必要ありません。9999 の全ページが互いに戦う場合より、1、10、100 のような小さく整理されたスケールの方が考えやすいです。
z-index はどれがフロントにあるかを決定します。より高い数値は勝ちます。位置指定された要素でのみ機能するため、プレーンな static 要素の z-index は無視され、position と z-index を一緒に設定します。9999 のパイルの代わりに、1、10、100 のような小さく整然とした数値を保ちます。 
