CSSでレイアウトを作っていると、position を使う場面は非常に多くあります。
しかし、
absolute が思った位置に配置されないfixed を使ったら画面に張り付いたsticky が効かないz-index が効かないなど、position はつまずきやすいポイントでもあります。
この記事では、CSSの position の種類と違いを、実際の使用例を交えながらわかりやすく解説します。
position は、要素の配置方法を決めるCSSプロパティです。
position: static;
のように指定します。
positionには主に以下の種類があります。
| 値 | 内容 |
|---|---|
| static | 通常配置(初期値) |
| relative | 元の位置を基準に移動 |
| absolute | 特定の親要素を基準に配置 |
| fixed | 画面を基準に固定 |
| sticky | スクロール位置で固定 |
position: static;
通常のHTMLの流れ通りに配置される状態です。
<div class="box">BOX</div>
.box {
position: static;
}
何も指定していない状態が static です。
topleftrightbottomが効きません。
position: relative;
元々ある位置を基準に移動します。
.box {
position: relative;
top: 20px;
left: 30px;
}
relativeは「元の位置」が残ったまま移動します。
つまり、
という特徴があります。
実務ではこれが非常に重要です。
.parent {
position: relative;
}
.child {
position: absolute;
}
position: absolute;
最も混乱しやすいのがこれです。
absoluteは、
「positionが指定された親要素」を基準に配置されます。
<div class="parent">
<div class="child"></div>
</div>
.parent {
position: relative;
width: 300px;
height: 300px;
}
.child {
position: absolute;
top: 0;
right: 0;
}
この場合、右上に配置されます。
親に position: relative; がない場合、
position: absolute;
は画面全体を基準にしてしまいます。
これが初心者がよくハマるポイントです。
position: fixed;
画面そのものを基準に固定されます。
.header {
position: fixed;
top: 0;
}
スクロールしても位置が変わりません。
fixedは通常レイアウトから外れるため、
padding-top
などで余白調整が必要になる場合があります。
position: sticky;
通常時は普通に表示され、
一定位置までスクロールすると固定されます。
.menu {
position: sticky;
top: 0;
}
かなり多いです。
よくある原因:
overflow: hidden;top が指定されていないpositionを使うと、z-index を使う場面も増えます。
.modal {
position: fixed;
z-index: 999;
}
要素の重なり順を指定します。
数字が大きいほど前面に表示されます。
| position | 特徴 |
|---|---|
| static | 通常配置 |
| relative | 元位置基準で移動 |
| absolute | 親基準で自由配置 |
| fixed | 画面固定 |
| sticky | スクロール時固定 |