CSSを記述するときにpositionプロパティを利用して、要素の位置をずらすことがあります。そのときに出てくるのが「absolute(絶対位置)」「relative(相対位置)」です。
なんとなく使っていたけど、「絶対位置」「相対位置」と言われてもなかなかピンとこない人もいるのではないでしょうか。
今回は実際に配置した例を見て、「absolute」と「relative」について確認していきましょう。
positionプロパティとは
まずは、「absolute」「relative」を使ううえで欠かせないpositionプロパティについても説明します。
positionプロパティは、「要素を配置する基準」を指定するためのプロパティです。「absolute」と「relative」はこの「基準」の場所を区別するためにあるということを理解していると、この先の説明もわかりやすく感じると思います。
absoluteとは
「absolute」は移動するときの基準がウィンドウ、または親要素になります。
つまり複数の要素がある場合でも「absolute」で指定すると、他の要素を無視して左上(top:0、left:0の位置)から移動するということです。
実際に配置した例を見ていきましょう。200px×100pxのboxを3つ並べました。
次に、青色のbox2に{ position: absolute; top:150px; left:100px } を指定します。
すると、box2はウィンドウの左上を基準(起点)にして、上から150px、左から100pxの位置に移動しました。さらに、absolute を指定した要素は高さがなくなり、浮いたような状態になるため、box3はbox2を無視して位置を詰めています。
relativeとは
relative は移動するときの基準が元いた位置になります。つまりpositionを記述する前に配置されていた場所から移動するということです。
box2に、{ position: relative; top:150px; left:100px; } を指定した例を見ていきましょう。
box2は自分が元々いた位置を基準にして、上から150px、左から100pxの位置に移動しています。
また、absoluteとは違い、移動させた要素の高さが残るため、box3は位置を詰めずそのままの位置に表示されています。
absoluteとrelativeの使い方
実際にWebサイトを制作すると、親要素を基準にして子要素を移動させたいという場合が多いです。しかし要素に空白を残したくないからと、子要素にだけ「absolute」を記述してしまうと、思ったように表示することができません。
たとえば、以下のようにparent(青いボックス)の子要素であるchild(緑のボックス)に { position:absolute; top:20px; left:150px; } を指定すると、以下のように表示されてしまいます。
これは、親要素ではなく画面左上を起点に子要素が移動してしまっているからです。
親要素を基準にするためには、親要素に「position:relative;」を記述します。こうすることで、子要素が親要素を基準に移動することができます。
まとめ
「relative」と「absolute」は、最初は混乱するかもしれませんが、少しでも理解しておくと、実際にpositionを使ってレイアウトするときやソースコードを参考にしたときにすんなりと記述しやすくなります。ぜひ覚えておきましょう。