はじめに

要素を自由な位置に配置できる position プロパティ。でも「absolute を指定したら変な場所に飛んだ」「relative との関係がわからない」とつまずきがちですよね。この記事では4つの値と、つまずきの原因&解決法をコード付きで解説します!

positionの4つの値

  • static:初期値(位置指定なし)
  • relative:相対配置(元の位置を基準に少しずらす/absoluteの基準にもなる)
  • absolute:絶対配置(基準要素から自由に配置)
  • fixed:固定配置(スクロールしても動かない)

relativeとabsoluteはセットで使う

absolute は単独で使うとページ全体が基準になり、意図しない場所に飛びます。親に relative を指定して基準を作るのが基本です。

<div class="parent">
  <div class="child">右上に配置</div>
</div>
.parent {
  position: relative; /* ← 子要素の配置基準になる */
}
.child {
  position: absolute; /* 親を基準に自由配置 */
  top: 0;
  right: 0;
}

fixed(固定配置)

スクロールしても画面の同じ位置に固定されます。常に表示したいヘッダーなどに使います。

.header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
}

つまずきポイント

  • absoluteで要素が思わぬ場所へ → 親に position: relative; を付け忘れていないか確認
  • 要素が重なって隠れるz-index で重なり順を調整(数字が大きいほど手前)

スクロールに追従する「position: sticky」も便利

relative・absolute・fixedに加えて、実務でよく使うのがposition: stickyです。「普段は通常の位置にあるけれど、スクロールして一定の位置に来ると貼り付いて追従する」という、relativeとfixedのいいとこ取りの挙動をします。

.header {
  position: sticky;
  top: 0; /* 画面の上端で止まって追従する */
}

ヘッダーの固定や、表の見出し行を残したいときに重宝します。fixedと違って元の場所のスペースを確保したまま動くので、レイアウトが崩れにくいのもポイントです。

absoluteの基準を正しく理解する

つまずきの大半は、absolutepositionが指定された一番近い親」を基準にするという仕組みの理解不足から起きます。親に何も指定がないと、基準がどんどん外側へ遡り、最終的に画面全体(body)が基準になって“あらぬ場所”へ飛びます。

だから「子をabsoluteで動かすなら、親にrelative」がワンセット。配置が崩れたら、まず親のrelativeを疑う——これだけで解決することがとても多いです。

まとめ

  • 基本は 「親にrelative+子にabsolute」のセット
  • fixed はスクロール追従の固定
  • 配置が崩れたら、まず基準(relative)を疑う

positionを使いこなせると、レイアウトの自由度が一気に上がります。学習や制作で詰まったら、ポートフォリオココナラものぞいてみてくださいね。