こんにちは、SouDogです。
CSSの中でも「position」は多くの初心者が最初につまづくポイントの一つです。レイアウトを調整しようと思ったら思った通りに動かない、表示がおかしくなる……そんな経験をされた方も多いのではないでしょうか?
この記事では、CSSの「position」プロパティについて、初めての方でも理解できるように図解やサンプルコードを交えて丁寧に解説していきます。
目次
1. positionとは何か?
positionプロパティは、要素の配置方法を指定するためのCSSプロパティです。これを使うことで、ページ内のどこに、どのように要素を配置するかをコントロールできます。
.example {
position: relative;
top: 20px;
left: 30px;
}
このように、positionに値を指定し、top・right・bottom・leftなどのプロパティで実際の位置を設定します。
2. positionの5つの値をざっくり紹介
| 値 | 意味 |
|---|---|
| static | 初期値(特別な位置指定をしない) |
| relative | 自分の元の位置を基準に移動できる |
| absolute | 一番近い”position指定された親要素”を基準に配置 |
| fixed | ビューポート(画面)に対して固定される |
| sticky | スクロール位置によって動いたり固定されたりする |
3. static:デフォルトの位置指定
最も基本的な状態で、何もpositionを指定しないとstaticになります。
.example {
/* position: static; ←書かなくてもこれが適用される */
}
この状態では、要素はHTMLで書かれた順番どおりに上から順に表示されます。topやleftなどは無効になります。
4. relative:基準は自分自身
relativeは「自分が元々あった位置」を基準に移動できます。
.relative-box {
position: relative;
top: 10px;
left: 20px;
}
この場合、元の場所から「下に10px、右に20px」ずれて表示されます。スペース自体は元の場所のままなので、他の要素のレイアウトには影響しません。
📝 補足図(イメージ):
[ 元の場所 ] → □ [ 表示位置 ] → □(10px下、20px右)
5. absolute:基準は親要素
absoluteは「一番近いposition指定された親要素」を基準にして配置されます。
.wrapper {
position: relative;
}
.child {
position: absolute;
top: 10px;
left: 10px;
}
.wrapperがrelativeなので、.childは.wrapperの左上から10px・10pxの位置に配置されます。
📝 注意点:親要素にpositionが指定されていない場合、bodyを基準にしてしまうことがあり、意図しない位置に出てしまいます。
6. fixed:画面に固定表示
fixedはスクロールしても常に画面の同じ位置に固定されます。
.fixed-box {
position: fixed;
top: 0;
right: 0;
}
たとえば「ページトップへ戻る」ボタンによく使われます。
7. sticky:スクロールに応じて動く
stickyはrelativeとfixedの中間のような動きをします。
.sticky-box {
position: sticky;
top: 0;
}
ある程度までは普通にスクロールされ、設定した位置(ここではtop: 0)まで来たら、画面に固定されます。
📝 使用時の注意点:親要素にoverflow: hiddenなどがあると動作しません。
8. z-indexとの関係性
positionを使うときに関係してくるのがz-indexです。これは「前後関係(重なり順)」を決めるプロパティです。
.box1 {
position: relative;
z-index: 1;
}
.box2 {
position: relative;
z-index: 10;
}
数値が大きいほど上に表示されます。positionが指定されていないとz-indexは効きません。
9. よくあるつまづきポイントと解決策
absoluteが意図しない場所に出る- → 親要素に
position: relativeを付け忘れている
- → 親要素に
stickyが効かない- → 親要素の高さが足りない、
overflowが関係している
- → 親要素の高さが足りない、
fixedがスマホでずれる- → ビューポートの問題(
meta viewportが必要)
- → ビューポートの問題(
- z-indexが効かない
- →
positionを指定していない
- →
10. 実践!よく使うレイアウトパターン集
■ トップに固定するヘッダー
.header {
position: fixed;
top: 0;
width: 100%;
z-index: 999;
}
■ カード内のアイコンを右上に固定
.card {
position: relative;
}
.card-icon {
position: absolute;
top: 10px;
right: 10px;
}
■ スクロールに応じて固定されるサイドメニュー
.sidebar {
position: sticky;
top: 20px;
}
11. まとめ
positionは要素の配置に大きく関係する重要なプロパティ- 値によって動き方が大きく変わるため、実際に動かして理解するのが大切
relativeとabsoluteの使い分けができれば、レイアウトの幅が広がるstickyやfixedも上手く使えば、より使いやすいUIが作れる
CSSのpositionをしっかり理解して、思い通りのデザインを実現していきましょう!



コメント