CSSの position: absolute を使った中央配置テクニック!

2025年03月30日
fvImg
「この要素、真ん中に配置したい」と思ったことはありませんか。
CSSの position: absolute; を使えば、要素を簡単に上下・左右中央に配置できます。
しかし、親要素との関係や中央配置の仕組みを理解していないと、「なぜかズレる」「思った位置に置けない」といったトラブルも。
この記事では、position: absolute; の基本から、上下左右の中央配置の方法を紹介しています。

position: absolute; とは?

CSSのposition: absolute;を使うと、要素を通常の流れを無視して自由に場所を決めて配置できるようになります。
しかし、position: absolute;を指定した要素は、基準となる要素が何かによって配置が変わるため、正しく使わないと意図しない位置に表示されてしまうことがあります。

通常の要素の配置
position: absolute;を使うと好きな場所に配置できる

position: absolute; の基準はどこ?

position: absolute;を指定すると、その要素は 「直近のposition: relative;を持つ親要素」を基準に配置されます。もし、親要素にposition: relative;が設定されていない場合は、(ブラウザの表示領域全体)が基準になります。

基準の例

シンプルな中央配置の方法

さっそく、実際に要素を中央に配置する方法を詳しく解説します。

上下左右の完全中央配置

See the Pen css-position-center3 by webmagic-lab (@kkindchy-the-selector) on CodePen.

.child {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
  }

完全に中央に配置するには、top: 50%; left: 50%;transformを組み合わせます。
top: 50%; left: 50%;で要素の左上にある基準が中央に配置され、translate(-50%, -50%);で要素の基準を要素の高さの半分、幅の半分の分移動させます。

transformで移動した後

上下中央配置(垂直方向)

See the Pen css-position-center1 by webmagic-lab (@kkindchy-the-selector) on CodePen.

.child {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
  }

top: 50%;を指定すると、要素の上端が高さの中央に配置されます。
transform: translateY(-50%);を使って、要素の高さの半分だけ上にずらし、完全な上下中央配置に修正します。

左右中央配置(水平方向)

See the Pen css-position-center3 by webmagic-lab (@kkindchy-the-selector) on CodePen.

.child {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
  }

left: 50%; だけでは、要素の左端が中央に配置されてしまうので、transform: translateX(-50%);を使って修正します。

position: absolute; を使うときの注意点

親要素のposition: relative;を忘れがち

position: absolute;を指定する場合、親要素にposition: relative;を付けないと、意図しない位置に配置される可能性があります。

width と height の設定も考慮する

中央配置する要素の幅や高さが変わると、位置がずれることがあります。特に、レスポンシブデザインでは注意が必要です。
例えば、可変幅の要素を中央に配置する場合、max-widthmin-widthを考慮すると良いでしょう。

.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 80%;
  max-width: 400px;
}

transform を使わない方法(marginを使う方法)

margin: auto;を使っても中央に配置できますが、position: absolute;の場合はtopleftを 0 にする必要があります。

この方法はtransformを使わずに中央配置できますが、widthheightが必須になります。

.child {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  margin: auto;
  width: 100px;
  height: 100px;
}
最終更新: