CSSのpositionプロパティの使い方
画像の上に文字を重ねたい、画面の右下にボタンを固定したい。
そんなときに使うのが、CSSの「position」というプロパティです。
この記事では、positionの5つの値の違いと、よく使う組み合わせを解説します。
1.位置の決め方を変える
positionは、要素をどこを基準に、どう配置するかを決めるプロパティです。主な値は次の5つです。
| 値 | どう配置されるか | よく使う場面 |
|---|---|---|
| static | ふつうの並び(初めの設定) | 特に指定しないとき |
| relative | 本来の位置から、少しずらす。absolute の基準にもなる | absolute の基準にする |
| absolute | 基準の箱の中で、決めた位置に置く | 画像の上に文字やラベルを重ねる |
| fixed | 画面に対して固定する。スクロールしても動かない | 右下のボタン、上に固定するヘッダー |
| sticky | スクロールして決めた位置に来ると、そこで止まる | スクロールについてくる見出しや目次 |
位置は、top・right・bottom・left で指定します。
2.positionを知っておくとよい理由
ホームページの多くの要素は、ふつうは上から順に並びます。positionを使うと、その並びとは別に、要素を重ねたり、画面に固定したりできます。
一方で、使い方を間違えると、要素がずれたり、ほかの要素と重なって隠れたりする原因になります。基準がどこなのかを理解しておくことが大切です。
positionで大切なのは、どこを基準に位置を決めているかを意識することです。
3.よく使う組み合わせ
画像の上にラベルを重ねる(relative と absolute)
.card {
position: relative;
}
.card__label {
position: absolute;
top: 8px;
left: 8px;
}
親の箱に relative を指定すると、absolute の子は、その親を基準に配置されます。親に指定がないと、さらに外側の箱や、ページ全体を基準にしてしまい、思わぬ場所に表示されます。
画面の右下にボタンを固定する(fixed)
.float-button {
position: fixed;
right: 16px;
bottom: 16px;
}
スクロールでついてくる目次(sticky)
.toc {
position: sticky;
top: 80px;
}
つまずきやすいポイント
- absolute の要素がずれる:基準にしたい親に relative を指定しているか確かめる
- sticky が効かない:親の箱に overflow: hidden などが指定されていないか確かめる
- fixed の要素が、ほかの要素の下に隠れる:重なりの順番(z-index)を確かめる
- absolute や fixed の要素は、ふつうの並びから外れるため、ほかの要素と重なることがある
4.よくある質問
relative だけ指定しても、見た目は変わりませんか?
top などを指定しなければ、見た目は変わりません。主に、absolute の基準にするために使います。
fixed のボタンが、スマートフォンで邪魔になります。
スマートフォンでは小さくする、位置を変える、スクロールしたときだけ出す、などの工夫があります。
重なった要素の、前後の順番を変えたいです。
z-index というプロパティで変えられます。詳しくは、z-index が効かない原因と解決方法で紹介しています。
position を使わずに配置できますか?
並べるだけなら、FlexboxやGridの方が向いています。position は、重ねたり固定したりするときに使いましょう。
5.まとめ
positionは、要素をどこを基準に、どう配置するかを決めるプロパティです。
- 重ねるときは、親に relative、子に absolute
- 画面に固定するなら fixed、途中で止めるなら sticky
- absolute がずれたら、基準の親を確かめる
- 並べるだけなら、FlexboxやGridを使う
重なりの順番については、CSSのz-indexが効かない原因と解決方法で解説しています。
要素の重なりや、位置のずれで困っている場合は、浅草Web屋にご相談ください。