🔰はじめての方へ

【CSS】わかりにくいposition: fixed・relative・absolute・fixed 要素の位置調整、考え方

CSS
記事内に広告が含まれています。
スポンサーリンク

position なんとかは、個人的になかなか難しくて、なんとなく使っていた感じだったので、一旦学習し直してみました。

わかりやすく図をいれて記事を書いたので、ご参照いただけたら嬉しいです!

1. absolute と relative の関係

基準値の考え方

まず、position: absolute は、一番近い position: relative; を基準として位置調整するものです。

position: relative; を指定した要素の 内側 が基準になります。

その中にある position: absolute; な要素は「親要素の左上」が基準点になります。

例:四角(親要素)の左上に円ボタンを置きたい場合

.parent {
 position: relative;
 width: 200px;
 height: 200px;
}
.child {
 position: absolute;
 top: 0;
 left: 0;
 width: 40px;
 height: 40px;
 border-radius: 50%;
 background: red;
}

↑この場合、円ボタンの 左上の角 が四角の左上にぴったり付きます。ボタンの中心ではありません。


fixed(画面全体を基準にする)

position: fixed; の場合、ブラウザ画面全体の左上が基準になります。

スクロールしても位置は変わりません。

例:左上にボタンを固定したい場合

.btn {
 position: fixed;
 top: 0;
 left: 0;
 width: 40px;
 height: 40px;
}

画面左上にボタンの「左上の角」が固定されます。

top の数値は「要素の上端」を基準にする

top は要素の 上端 が基準になります。

つまり、ボタンの中心を中央に合わせたい時、そのまま top: 50% (left: 50%) と書くと、ボタンの上端 が中央に来てしまいます。

そこで使うのが transform: translateY(-50%) です。

3. 要素の「中心」を合わせたいとき

「円の中心を四角の角にぴったり重ねたい」ときに使うのが transform です。

.circle {
  position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%, -50%);
}
  • translateX(-50%) → 円の横幅の半分だけ左にずらす
  • translateY(-50%) → 円の高さの半分だけ上にずらす

これで、円の中心 が四角の左上角にぴったり合います。

4. よくある誤解

「top: 0; left: 0; は要素の中心をそろえる」と思いがちですが、

実際は 要素の左上」をそろえる 指定です。

absolute の場合:基準は「親要素の左上」で、要素の左上がその位置に来る。

fixed の場合:基準は「画面の左上」で、やはり要素の左上がその位置に来る。

円や特殊な形を配置したいときには、必ず transform: translate() で補正をかけるのが基本です。


まとめ

  • absolute は relative 親の四角の左上 を基準に配置される
  • fixed は画面左上が基準
  • top: 0; left: 0; で揃うのは 要素の左上
  • 円など「中心を合わせたい」場合は
    transform: translate(-50%, -50%) を使う

ハンバーガーボタンの場合、position: fixed で位置調整していないロゴと、position: fixed で調整しているボタンの位置を合わせるには、calc を使った計算をするのが便利です。

それについては別の記事でご紹介しているので、よろしければご覧ください!