CSS

CSS positionの使い方|relative・absolute・fixed・stickyの違い

CSS positionのstatic・relative・absolute・fixed・stickyを実例で解説。基準となる包含ブロック、z-index、スクロール時の挙動、効かない原因とアクセシビリティ上の注意を整理します。

この記事の目次
  1. 結論:まず押さえるポイント
  2. CSS positionの使い方の基本
  3. 最小の実装例
  4. HTML
  5. CSS
  6. 実務で使うときの考え方
  7. sticky見出し
  8. fixedの閉じるボタン
  9. z-indexとスタッキングコンテキスト
  10. よくある失敗と直し方
  11. absoluteがページ全体の左上へ移動する
  12. stickyが効かない
  13. z-indexを増やしても前に出ない
  14. WordPressで使う場合
  15. よくある質問
  16. absolute要素の分だけ親の高さは増えますか?
  17. fixedとstickyはどちらを使いますか?
  18. 位置調整にtransformを使ってよいですか?
  19. まとめ
  20. 関連する基礎記事
  21. 参照した公式資料

要素を親の中で重ねるなら「親にrelative、子にabsolute」が基本です。画面へ固定するfixed、スクロール途中から固定するstickyは便利ですが、本文やフォーカス対象を隠さないよう実機で確認します。

情報確認日:2026年7月27日

結論:まず押さえるポイント

この記事の結論

  • absoluteの基準はpositionがstatic以外の最も近い祖先
  • fixedはビューポート基準、stickyはスクロール領域内
  • z-indexは同じスタッキングコンテキスト内で比較される
  • 通常レイアウトはGridやFlexboxを優先する
スポンサーリンク

CSS positionの使い方の基本

staticは通常配置です。relativeは元の場所を保ちながら位置調整でき、absolute要素の基準も作れます。absoluteは通常フローから外れます。fixedは画面、stickyは指定したスクロール境界に追従します。

最小の実装例

HTML

<article class="card">
  <span class="card-badge">NEW</span>
  <h2>新しい記事</h2>
  <p>カードの右上にバッジを置きます。</p>
</article>

CSS

.card {
  position: relative;
  padding: 2rem 1.5rem 1.5rem;
}

.card-badge {
  position: absolute;
  inset-block-start: 0.75rem;
  inset-inline-end: 0.75rem;
}

toprightではなく論理プロパティのinset-block-startinset-inline-endを使うと、書字方向の変更にも対応しやすくなります。

実務で使うときの考え方

sticky見出し

.toc { position: sticky; top: 1rem; align-self: start; }

stickyは親のoverflowや高さ、スクロール領域の影響を受けます。固定ヘッダーがある場合はtopにその高さを含めます。

fixedの閉じるボタン

モーダルをfixedで重ねる場合は、見た目だけでなくフォーカストラップ、Escapeで閉じる処理、背景のスクロール抑制、閉じた後のフォーカス復帰が必要です。

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

z-index: 9999でも、親が別のスタッキングコンテキストの下にあれば前へ出ません。positionとz-indexだけでなく、transform、opacity、filter、isolationなどを祖先まで確認します。z-indexは層の用途ごとにトークン化しておくと、値が際限なく増えるのを防げます。

よくある失敗と直し方

absoluteがページ全体の左上へ移動する

基準にしたい親へposition:relativeがあるか確認します。

stickyが効かない

topなどのしきい値、親のoverflow、スクロール領域の有無、親が要素より十分高いかを確認します。

z-indexを増やしても前に出ない

祖先が作るスタッキングコンテキストをDevToolsで確認します。

WordPressで使う場合

WordPressの管理バーはログイン中だけ上部に表示されます。fixed・stickyヘッダーを使うテーマでは、管理バー、アンカーリンク、スマートフォンのセーフエリアを確認します。プラグインのモーダルとのz-index競合にも注意します。

よくある質問

absolute要素の分だけ親の高さは増えますか?

増えません。通常フローから外れるため、親のpaddingなどで必要な空間を確保します。

fixedとstickyはどちらを使いますか?

常に画面へ固定するならfixed、元の場所からスクロールして範囲内だけ追従させるならstickyです。

位置調整にtransformを使ってよいですか?

中央揃えやアニメーションに使えますが、新しいスタッキングコンテキストやfixedの基準へ影響する場合があります。

まとめ

positionは重なりや追従が必要な要素へ限定し、通常のレイアウトはGridやFlexboxを使います。absoluteの基準、stickyのスクロール親、z-indexのスタッキングコンテキストを順に確認してください。

関連する基礎記事

参照した公式資料

スポンサーリンク