コーディング犬に聞く:「position:absoluteが難しいです」

CSSを勉強していると、

多くの人がつまずくものがあります。

それが、

position: absolute;

です。

初心者の頃は、

  • 思った場所に行かない
  • どこかへ消えた
  • 親要素から飛び出した
  • topやleftが効かない

など、

意味が分からなくなることがよくあります。

今回は、

「position:absoluteが難しいです」

という悩みをコーディング犬に相談してみました。

質問人

Q. position:absoluteって何?

「要素を好きな場所に配置するためのCSSだよ!」

例えば、

.box{
position:absolute;
top:0;
left:0;
}

とすると、

指定した場所へ移動できます。

コーディング犬
質問人

Q. topとかleftって何?

「位置の指定だよ!」

例えば、

top:0;

は、

上から0px。


left:0;

は、

左から0px。

です。


つまり、

top:0;
left:0;

なら、

左上に配置されます。

コーディング犬
質問人

Q. じゃあ簡単じゃない?

「実はここが罠なんだ。」

初心者が最初にやると、

だいたいこうなります。


.box{
position:absolute;
}

「あれ?」


「どこ行った?」


「なんか変な場所にある!」


これがabsoluteあるあるです。

コーディング犬
質問人

Q. なぜそうなるの?

「基準が分かってないから!」

absoluteには、

必ず

『どこを基準にするか』

があります。

コーディング犬
質問人

Q. 基準?

例えば、

こんなHTML。

<div class="parent">
<div class="child">
ボタン
</div>
</div>

そして、

.child{
position:absolute;
top:0;
right:0;
}

とします。


初心者は、

親要素の右上に行くと思います。


でも実際は違うことがあります。

コーディング犬
質問人

Q. なぜ?

「親にpositionが無いから!」

例えば、

.parent{
position:relative;
}

が無いと、

absoluteは画面全体を基準にします。

コーディング犬
質問人

Q. つまり?

覚えることは1つ。


.parent{
position:relative;
}

.child{
position:absolute;
}

セットで覚える。

これが超重要です。

コーディング犬
質問人

Q. relativeって何?

「absoluteの親になるための目印!」

初心者は、

position:relative;

を見ると、

位置を動かすものだと思いがちです。


でも実務では、

position:absolute;

のために使うことが多いです。

コーディング犬
質問人

Q. 実際によくある使い方は?

「NEWマーク!」

例えば、

商品名
NEW

みたいなやつ。


HTML

<div class="card">
<span class="new">NEW</span>
</div>

CSS

.card{
position:relative;
}

.new{
position:absolute;
top:10px;
right:10px;
}

これで右上に配置できます。

コーディング犬
質問人

Q. 他には?

例えば、

  • バナーの装飾
  • ボタンのアイコン
  • 吹き出し
  • ラベル
  • モーダルの閉じるボタン

など。


Web制作ではかなり使います。

コーディング犬
質問人

Q. absoluteにすると何が変わる?

「通常の流れから外れる!」

例えば、

<div>A</div>
<div>B</div>
<div>C</div>

なら、

A
B
C

です。


でも、

Bをabsoluteにすると、

A

C

みたいになります。


レイアウトの計算から外れるんです。

コーディング犬
質問人

Q. だから重なるの?

「その通り!」

absoluteは、

浮いている状態。


なので、

他の要素と重なります。

コーディング犬
質問人

Q. z-indexって関係ある?

「めちゃくちゃある!」

例えば、

z-index:10;

なら、

前に出ます。


z-index:1;

なら、

後ろになります。


absoluteとセットでよく使います。

コーディング犬
質問人

Q. 初心者がよくやるミスは?

これです。


.child{
position:absolute;
}

.parent{
position:relative;
}

を書き忘れる。


これは本当に多いです。

コーディング犬
質問人

Q. 覚え方はある?

「relativeが家。」


「absoluteが子供。」


子供は家を基準に動く。


だから、

.parent{
position:relative;
}

.child{
position:absolute;
}

これで覚えればOK。

コーディング犬
質問人

Q. 実務では頻繁に使う?

「かなり使う!」

ただし、

レイアウト全体を作るためではありません。


今は、

display:flex;

display:grid;

が主流です。


absoluteは、

『細かい位置調整』

で使うことが多いです。

コーディング犬

まとめ

position:absoluteが難しく感じる理由は、

「基準」

を理解していないからです。

まず覚えるべきは、

.parent{
position:relative;
}

.child{
position:absolute;
}

このセット。

そして、

  • top
  • right
  • bottom
  • left

で位置を調整します。

absoluteは、

Web制作で頻繁に使う重要なCSSです。

最初は難しく感じますが、

「relativeが家、absoluteが子供」

と覚えると一気に理解しやすくなります。

コーディング犬との約束です。