【完全ガイド】div要素の垂直方向中央揃え(flexbox、margin、position、line-height、table-cell、CSS Grid)

2024-04-03

CSSでdiv要素を垂直方向に中央揃えする方法

flexboxは、要素を柔軟に配置するためのレイアウトシステムです。div要素を垂直方向に中央揃えするには、親要素に display: flexalign-items: center を設定します。

.parent {
  display: flex;
  align-items: center;
}

この方法は、簡単で汎用性が高いため、最もよく使われます。

margin: 0 auto; は、要素の左右に等しいmarginを設定します。親要素の高さがある場合、この方法を使ってdiv要素を垂直方向に中央揃えすることができます。

.div {
  margin: 0 auto;
}

ただし、親要素の高さがない場合、この方法は機能しません。

position: absolute; を使ってdiv要素を親要素の中央に配置することができます。

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

この方法は、他の方法よりも複雑ですが、より多くのコントロールが可能になります。

  • 簡単で汎用性の高い方法を求めている場合は、flexboxを使うのがおすすめです。
  • 親要素の高さがない場合、またはより多くのコントロールが必要な場合は、position: absolute; を使うのがおすすめです。



<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>サンプルコード</title>
  <style>
    .parent {
      height: 200px;
      border: 1px solid #ccc;
    }

    .div {
      width: 100px;
      height: 50px;
      background-color: #f00;
    }

    /* flexboxを使う */
    .flex {
      display: flex;
      align-items: center;
    }

    /* margin: 0 auto;を使う */
    .margin {
      margin: 0 auto;
    }

    /* position: absolute;を使う */
    .absolute {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
  </style>
</head>
<body>
  <h2>flexboxを使う</h2>
  <div class="parent flex">
    <div class="div"></div>
  </div>

  <h2>margin: 0 auto;を使う</h2>
  <div class="parent">
    <div class="div margin"></div>
  </div>

  <h2>position: absolute;を使う</h2>
  <div class="parent">
    <div class="div absolute"></div>
  </div>
</body>
</html>

各方法の詳細

flexboxを使う

.flex {
  display: flex;
  align-items: center;
}
  • display: flex; は、親要素をflexboxレイアウトに設定します。
  • align-items: center; は、子要素を親要素の垂直方向の中央に配置します。

margin: 0 auto;を使う

.margin {
  margin: 0 auto;
}
  • margin: 0 auto; は、要素の左右に等しいmarginを設定します。

position: absolute;を使う

.absolute {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
  • position: absolute; は、要素を絶対配置に設定します。
  • top: 50%; は、要素の上端を親要素の上端から50%の位置に配置します。
  • transform: translate(-50%, -50%); は、要素を50%ずつ左右に移動します。



line-height は、行の高さのプロパティです。親要素の高さに一致する line-height を設定することで、div要素を垂直方向に中央揃えすることができます。

.parent {
  height: 200px;
  line-height: 200px;
}

.div {
  display: inline-block;
}

ただし、この方法は、親要素内にテキストがない場合にのみ有効です。

table-cellを使う

display: table-cell; を使ってdiv要素をテーブルセルのように表示することができます。親要素に display: table; を設定することで、div要素を垂直方向に中央揃えすることができます。

.parent {
  display: table;
  height: 200px;
}

.div {
  display: table-cell;
  vertical-align: middle;
}

この方法は、IE8以前のブラウザではサポートされていないことに注意が必要です。

.parent {
  display: grid;
  height: 200px;
  align-items: center;
}

.div {
  width: 100px;
  height: 50px;
  background-color: #f00;
}

この方法は、比較的新しい機能なので、すべてのブラウザでサポートされているわけではありません。

  • 親要素内にテキストがない場合、またはIE8以前のブラウザでもサポートしたい場合は、line-height を使うのがおすすめです。

div要素を垂直方向に中央揃えするには、さまざまな方法があります。それぞれの方法のメリットとデメリットを理解して、状況に合わせて最適な方法を選びましょう。


html css alignment


Stringクラス、ライブラリ、正規表現:JavaでHTMLをエスケープするベストプラクティス

String クラスの replace() メソッドを使う最も基本的な方法は、String クラスの replace() メソッドを使うことです。 このメソッドは、文字列中の特定の文字列を別の文字列に置き換えることができます。このコードを実行すると、次のように出力されます。...


リンク付きボックスや見出しリンクを作るには?divとアンカーの使い分け

答え: はい、状況によっては正しいです。ただし、いくつかの注意点があり、適切な方法で使用しないと問題が発生する可能性があります。いつdivをアンカー内に配置するのか?以下のような状況でdivをアンカー内に配置することが有効です。リンク付きのボックスを作成したい場合:...


jQueryで入力変更を検知してリアルタイム処理を実現!サンプルコード付き

changeイベント概要: フォーム要素の値が確定したときに発生するイベントです。利点: 入力完了後のみ処理を実行したい場合に適しています。欠点: キー入力を検知できないため、入力途中の処理には不向きです。keyupイベント利点: 入力途中の処理にも対応できます。...


【保存版】Flexboxで画像のアスペクト比を維持する方法と注意点

この問題には主に2つの原因があり、それぞれ解決策が異なります。親要素のサイズと align-items プロパティの影響Flexboxレイアウトでは、親要素のサイズと align-items プロパティによって、子要素の配置とサイズが決定されます。デフォルトでは、align-items は stretch に設定されており、親要素の空きスペースに合わせて子要素が伸縮されます。これが画像の場合、縦横比が歪んでしまう原因となります。...


CSSフレームワークをもっと便利に! @applyでコードをすっきり簡潔に

@applyの利点コードの簡潔化: @applyを使用すると、ユーティリティクラスを何度も呼び出す必要がなくなり、コードが簡潔になります。スタイルの再利用: @applyを使用すると、ユーティリティクラスをカスタムコンポーネント内で再利用することができます。...