🔰はじめての方へ

【CSS】要素の位置を調整する top と transform: translateY(-50%) の考え方

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

Web制作でよく出てくるのが

「要素を上下や左右の中央にそろえたい」

「ロゴやハンバーガーボタンをきれいに配置したい」

といったレイアウト調整です。

この記事では、top・calc()・transform: translateY(-50%) を使った位置調整の仕組みを、わかりやすく解説します。

position: relative position: absolute position: fixed については、他でも解説しているので、気になる方はあわせてご参照ください!

 


1. (復習)position: fixed / absolute の基準とは?

まず、top や left で位置を指定する場合、基準となるのは 親要素 です。

  • position: absolute の場合 →
     「一番近い position (relative/fixed)」が基準。
  • position: fixed の場合 → 
     画面(ビューポート)全体 が基準。

つまり、top: 0; left: 0; と書けば、

  • absolute → 親要素の左上
  • fixed → 画面の左上

に配置されます。

図を混えて詳しく解説した記事もあるので、ご参照ください(参照:【CSS】わかりにくいposition: fixed・relative・absolute・fixed 要素の位置調整、考え方


2. top: 50% の意味

.my-box {
  position: fixed;
  top: 50%;
}

これは「基準の高さの 50% の位置に、要素の上端を置く」という意味です。

たとえば画面の高さが 800px なら、

→ top: 50% は「画面の上から 400px のところに要素の上端を置く」ということ。

なので、要素の高さ分ずれてしまい、本当の中央にはならない のです。


3. transform: translateY(-50%) を組み合わせる

そのズレを修正するために使うのが transform: translateY(-50%)

.my-box {
  position: fixed;
  top: 50%;
  transform: translateY(-50%);
}
  • top: 50% で、要素の「上端」が中央に来る
  • translateY(-50%) で、要素の「高さの半分」だけ上に移動させる

こうすると、要素全体が 縦中央にぴったり揃う という仕組みです。


4. calc() を使った微調整

ロゴやボタンを「ロゴ中央に合わせたい」「余白も考慮したい」といった場合は、calc() が便利です。

例)

  • 上の余白(padding-top)= 18px
  • ロゴの高さ = 50px(中央は 25px)
  • ボタンの高さ = 40px(中央は 20px)
.vk-mobile-nav-menu-btn {
  width: 40px;
  height: 40px;
  position: fixed;
  left: 15px;
  top: calc(18px + 25px - 20px);
}

top を「ロゴの上 padding + ロゴの高さ/2 – ボタンの高さ/2」で調整

これで「ロゴ中央とボタン中央をそろえる」ことができます。


5. まとめ

  • top: 0; left: 0; → 左上に固定
  • top: 50% → 要素の上端が中央に来る
  • top: 50% + transform: translateY(-50%) → 要素全体が中央に来る
  • calc() を使えば「余白」や「ロゴ・ボタンの高さ」を計算して、細かい位置合わせが可能

CSS の位置調整は一見複雑ですが、
「基準はどこか」「どの点を中央に揃えたいのか」 を意識すると理解しやすくなります。


実際のプロジェクトでは、ロゴやボタンを揃えるときに calc() を使ったり、縦中央にしたいときに translateY(-50%) を使ったりと、ケースバイケースで組み合わせると便利です!