Web制作を学んでいると、「要素の上に文字を重ねたい」「画面の右下に常にボタンを表示させたい」といった、通常の並び方では実現できないレイアウトに遭遇します。
そんな時に必須となるのが position プロパティです。
しかし、この position は初心者にとっての大きな難所。特に absolute (絶対配置)を使うと、要素がどこかへ飛んでいってしまったり、レイアウトが崩れたりして挫折する人が後を断ちません。
この記事では、 relative / absolute / fixed の決定的な違いと、実務で失敗しないための「親要素との関係性」を徹底解説します。この記事を読み終える頃には、自由自在に要素を配置できる自信がついているはずです。
CSSのpositionとは?
結論から言うと、position は「要素の配置方法(位置決めのルール)を変更するプロパティ」です。
通常、HTMLの要素は上から順に、左から右へと整列していきます。これを「通常の文書フロー(ノーマルフロー)」と呼びます。 position を使うと、このフローを無視して、要素を好きな場所に「浮かせて移動」させることができるようになります。
positionの役割
- 配置の基準を決める:自分自身の場所か、親要素か、あるいはブラウザの画面全体か。
- 重ね順を変える:写真の上に文字を乗せるなど、奥行きのレイアウトを作る。
- 固定する:スクロールしても消えないメニューなどを作る。
実務において、この position を使いこなせないと、モダンなWebデザインを作ることは不可能と言っても過言ではありません。
positionを使わない場合の基本配置ルール
position の真価を理解するためには、まずは「何も指定しない場合のルール」を再確認しましょう。
通常のHTML配置(ノーマルフロー)
HTML要素は、デフォルトでは以下のルールに従って並びます。
- 上から下へ:ブロック要素(divやpなど)は、新しい行として積み重なります。
- 左から右へ:インライン要素(spanやaなど)は、横に流れます。
- 隙間なく並ぶ:前の要素が終わったすぐ後に次の要素が配置されます。
この「自然な流れ」を強制的に変えるのが position の仕事です。これを踏まえると、 position を使うということが「特殊な魔法を使うこと」だとイメージしやすくなります。
positon: relativeとは?(自分基準)
relative は「相対配置」と呼ばれます。
元の位置を基準に動く
relative を指定しただけでは、見た目は何も変わりません。しかし、 top (上から)や left (左から)といったプロパティを併用すると、「本来自分がいるはずだった場所」を基準にして移動します。
.box {
position: relative;
top: 20px;
left: 20px;
}

最大の特徴:元の場所は保持される
これが一番のポイントです。 relative で移動しても、「元いた場所」にはその要素のサイズ分の空白が残ります。他の要素は、その空白を避けて配置されます。
position: absoluteとは(親基準)
実務で最も頻繁に使い、かつ最も混乱を招くのがこの absolute (絶対配置)です。
親要素を基準に配置される
absolute は、自分から見て一番近い「static 以外(主に relative )」が指定されている親要素を基準にして移動します。
通常フローから外れる
absolute を指定した要素は、地面から浮いた状態になり、元の場所にスペースを残しません。これを「浮き上がる」と表現することが多いです。

【重要】親にrelativeが必要な理由
absolute を使う際の鉄則は、基準にした親要素に position: relative; を書いておくことです。これを忘れると、要素はブラウザの画面全体を基準にしてどこかへ飛んでいってしまいます。
position: fixedとは?(画面基準)
fixed は「固定配置」です。
画面(ビューポート)基準
親要素がどこにあろうと関係ありません。ブラウザの表示画面そのものを基準にして配置されます。
スクロールしても固定される
最大の特徴は、ユーザーがどれだけページを下にスクロールしても、指定した位置に留まり続けることです。
- 実務例:追従型のヘッダー、ページの右下にある「トップへ戻る」ボタン、画面全体を覆うモーダルウィンドウ。
relative・absolute・fixedの違いを比較
ここで、それぞれを「比較表」で頭の中を整理しましょう。
| 種類 | 基準位置 | レイアウトへの影響 | 主な用途 |
|---|---|---|---|
| static | 指定なし | 通常の並び順 | デフォルトの状態 |
| relative | 自分の元の位置 | 元の場所が確保される | わずかな微調整、absoluteの基準 |
| absolute | 親要素(基準) | 浮き上がり、場所を取らない | 重なり、バッジ、装飾パーツ |
| fixed | ブラウザ画面 | 浮き上がり、常に同じ位置 | 固定ヘッダー、追従ボタン |
positionが効かない・思った通りに動かない原因
「なぜか重ならない」「変なところに移動した」といったトラブルの解決策です。
親要素にrelativeがない
absolute が暴走する原因の9割がこれです。必ず親要素を確認しましょう。

z-index問題
要素を重ねた際、下の要素が上にきてしまうことがあります。これは「【CSS】文字色を変えてみよう!colorの使い方とセレクタ(要素・class・id)の基本」で触れていますが、優先順位とは別の、z-index (重なりの順序)というプロパティが関係しています。
※ position が指定されていない要素には z-index は効きません。
要素サイズ問題
absolute を指定すると、要素が「中身に合わせた最小幅」に縮んでしまうことがあります。必要に応じて width: 100%; などを指定する必要があります。
positionを使うときの注意点
現場レベルでの「やってはいけない」を紹介します。
absoluteの乱用を避ける
すべての配置を absolute で行おうとする初心者がいますが、これは危険です。レスポンシブ(スマホ対応)の際に、画面幅が変わると要素がバラバラに崩れてしまいます。
基本は「【CSS入門】Flexboxで要素を横並びにする方法|display:flexの基本」でレイアウトを作り、どうしても重ねたい部分だけ position を使いましょう。
fixedの重なり問題
固定ヘッダーを作ると、その下のコンテンツがヘッダーの下に潜り込んで見えなくなってしまいます。コンテンツの最上部にヘッダーの高さ分の padding を入れるといった工夫が必要です。
実務でよく使うpositionの活用例
現場で実際にどう使われているかを見てみましょう。
固定ヘッダー
スマホサイトなどで、ロゴやメニューを常に上部に表示させます。
header {
position: fixed;
top: 0;
width: 100%;
}
モーダル(ポップアップ)
背景を暗くして、画面の中央にお知らせを出す手法です。
.modal-overlay {
position: fixed;
inset: 0; /* 上下左右0を指定 */
display: flex;
justify-content: center;
align-items: center;
}
通知バッジ
SNSアイコンの右上に「未読数」を乗せるデザインです。
.icon-wrapper { position: relative; } /* 親 */
.badge {
position: absolute; /* 子 */
top: -5px;
right: -5px;
}

まとめ
position をマスターするための最短ルートは、以下の3つを呪文のように覚えることです。
- relative:自分基準。親になって absolute を受け止める。
- absolute:親基準。浮き上がって自由に配置できる。
- fixed:画面基準。スクロールに負けない。
まずは、小さな四角いボックスを2つ作り、relative と absolute を設定して実際に動かしてみてください。「あ、動いた!」という感動が、あなたのコーディングスキルを飛躍的に高めてくれます。

