こんにちは、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をしっかり理解して、思い通りのデザインを実現していきましょう!
コメント