position: relative; は、CSSレイアウトの中でも最もよく使われるプロパティのひとつです。
見た目はstatic(通常配置)とほとんど同じですが、実は「要素を動かせるようにするための土台」となる重要な設定です。
この記事では、position: relative; の意味と使い方、staticとの違い、absoluteとの関係まで、コード例を交えながらわかりやすく解説します。
positionプロパティの基本
まずは前提として、positionプロパティの役割をおさらいしておきましょう。
positionは、要素の位置の基準をどこにするかを決めるCSSプロパティです。
主な値は次のとおりです。
| 値 | 意味 |
|---|---|
| static | 通常の文書の流れに従う(デフォルト) |
| relative | 自分の元の位置を基準に移動 |
| absolute | 親または祖先のposition指定要素を基準に配置 |
| fixed | ビューポート(画面)を基準に固定配置 |
| sticky | スクロールに応じて固定/通常位置を切り替え |
今回は、この中でもrelative(相対配置)に焦点を当てて解説します。
position: relative; とは?
position: relative; は、要素を「元の位置」から相対的に動かすための指定です。
英語の “relative” は「相対的な」という意味で、
「もともとの位置を基準に少しだけずらす」イメージを持つと分かりやすいです。
例:relativeを指定した場合の動き
See the Pen Untitled by suguru (@suguru22) on CodePen.
結果:
ボックスは、本来の位置から「下へ30px」「右へ40px」ずれて表示されます。
ただし、ずれた後も元の位置のスペースはそのまま確保されます。
staticとの違い
一見似ていますが、relative と static には明確な違いがあります。
| プロパティ | 配置の基準 | top / left などの指定 | z-index |
|---|---|---|---|
| static | 通常フロー | ×(無効) | ×(無効) |
| relative | 自分の元の位置 | ○(有効) | ○(有効) |
つまり、
- 見た目が同じでも、relativeを指定すると座標が使えるようになる
- z-indexで重なり順の調整も可能になる
という点が大きな違いです。
例:staticとrelativeの比較
See the Pen Untitled by suguru (@suguru22) on CodePen.
結果:
static要素は通常の位置に配置されます。relative要素は、そこから下に20px・右に30pxずれます。
ただし、static要素との間隔は変わらず、空白スペースは残ったままです。
relativeを使う理由
「見た目がほとんど変わらないのに、なんでrelativeを使うの?」
と思うかもしれません。
実は、relativeの真の強みは 「子要素の基準を作る」 ことにあります。
relativeは「absoluteの基準」になる
position: absolute; の要素は、
最初のposition指定を持つ祖先要素を基準に配置されます。
つまり、親要素に position: relative; を指定すると、
子要素をその中で自由に動かすことができるようになります。
See the Pen Untitled by suguru (@suguru22) on CodePen.
結果:
ピンクの子要素は、親要素(灰色ボックス)の中で
上から50px、左から50pxの位置に配置されます。
もし親にposition: relative;がなければ、
子要素は画面全体(body)を基準に配置されてしまいます。
relativeを使うときの注意点
① 元の位置のスペースは残る
relativeで移動しても、周囲のレイアウトには影響しません。
他の要素がそのスペースを詰めてくることはありません。
② 大きく動かす用途には不向き
relativeはちょっとした調整(数px〜数十px)に適しています。
大きく位置を変える場合は、absolute や flexbox、grid の利用を検討しましょう。
まとめ:relativeは“基準”を作る役割
| 状態 | 意味 |
|---|---|
position: relative; | 要素を「元の位置」から相対的に動かせる |
top, left などが有効になる | ✅ |
z-index が使えるようになる | ✅ |
| 子要素(absolute)の基準になれる | ✅ |
relativeは「少し動かす」「absoluteの基準を作る」といった、
CSSレイアウトの要になる設定です。

