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

CSS positionの使い方とは

position は、要素の配置方法を決めるプロパティです。top right bottom left と組み合わせて使います。値によって、どこを基準にするかと通常の流れ(レイアウトの場所取り)に残るかが変わります。特に absolute は、親に position: relative を付けないと、意図しない場所を基準にします。

基本(構文・仕組み)

値 基準 場所取り
static(初期値) 通常の流れ。top などは無効 あり
relative 本来の位置からずらす 元の場所を残す
absolute 最も近い position 指定のある祖先 なし(流れから外れる)
fixed ビューポート なし
sticky 通常の位置とスクロール位置の間 あり

absolute の基準は、「static 以外の祖先」のうち、最も近いものです。見つからないと、初期の包含ブロック(ほぼ画面全体)が基準になります。そのため、カードにバッジを重ねたいときは、カードに position: relative、バッジに position: absolute を書くのが定番です。

.card { position: relative; }
.badge {
  position: absolute;
  top: -10px;
  right: -10px;
}

fixed は、祖先に transform perspective filter があると、その祖先が基準になることがあります。sticky は別記事 position: sticky にまとめています。

サンプルコード(実行結果つき)

<style>
.card  { width: 240px; height: 120px; margin: 40px; position: relative; background: #def; }
.nopos { width: 240px; height: 120px; margin: 40px; background: #fed; }
.badge { position: absolute; top: -10px; right: -10px; width: 40px; height: 40px; background: #e33; border-radius: 50%; }
</style>
<div class="card">card<span class="badge">1</span></div>
<div class="nopos">no position<span class="badge">2</span></div>

動作確認(検証環境と結果)

  • 環境: Windows 11 / Microsoft Edge 154(Chromium系、headless)/ render.ps1 + getBoundingClientRect()
  • ファイル: C:Tempks2techtestst2position.html
バッジ 結果
1(親に relative) 親の右端より10px外側、上端より10px上に配置された
2(親に position なし) 親ではなく画面の右上を基準にし、画面右端から10pxはみ出した(本来の位置から大きく外れた)

バッジ2のずれは、親に position: relative が無いことが原因です。

CSS positionの使い方の注意点

  • absolute の要素は高さを持たないため、親の高さが0に潰れることがあります。
  • relative を付けただけでは、見た目は変わりません。基準を作る目的で使うことが多い設定です。
  • position を指定した要素には z-index が効きます。重なり順は CSSのz-indexプロパティによる重なり順は『箱』を基準に決まる も参照してください。
  • fixed のヘッダーは、本文を隠します。ヘッダー分の余白(padding-top など)を本文側に確保します。

CSS positionの使い方でよくあるミス

  • 親に relative を付け忘れ、バッジやアイコンが画面端に飛ぶ。
  • absolute で中央寄せを作ろうとして、left: 50% だけで止める(transform: translateX(-50%) や inset: 0; margin: auto を併用する)。
  • absolute を多用して、レスポンシブで崩れる。通常の配置は Flexbox や Grid に任せるほうが安定します。
  • スマホで fixed の要素が、アドレスバーの出し入れでずれる。

ブラウザ対応・バージョン

static relative absolute fixed は、すべての主要ブラウザで長く使える機能です。sticky は、対応が後から広がりました。MDN の Browser compatibility で、対象環境を確認してください。

CSS positionの使い方のチェックリスト

  • absolute を使う前に、基準となる親に position: relative を付けたか。
  • 重ねる要素の z-index を、整理して決めたか。
  • 画面幅390pxと1200pxで、位置を確認したか。
  • 通常配置で済む場面で、absolute を使っていないか。

CSS positionの使い方のFAQ(よくある質問)

Q. relative と absolute の違いは?
A. relative は元の場所を残してずらします。absolute は流れから外れ、基準の祖先に対して位置を決めます。

Q. top を指定したのにずれません。
A. position: static のままの可能性があります。static では top などが無効です。

Q. 要素の中央に重ねるには?
A. inset: 0; margin: auto; に幅・高さを組み合わせるか、親を Grid にして place-items: center にします。CSS中央寄せ を参照してください。

筆者の見解(CSS positionの使い方)

position: absolute は強力な反面、使う場所を絞ったほうが保守しやすいと考えます。バッジ、閉じるボタン、画像上のキャプションなど「何かの上に重ねる」場面に限定し、段組みや並びは Flexbox・Grid に任せる、という使い分けがおすすめです。

CSS positionの使い方の関連項目

出典(一次情報)

タイトルとURLをコピーしました