要素を上下中央に置く作業は、見た目だけでなく読みやすさや操作性にも直結します。特にカード、モーダル、ヒーロー領域、ボタン内のアイコンなどは、少しずれるだけでウェブデザイン全体の印象が崩れます。
そのため、中央揃えは単一の書き方で覚えるより、要素の高さが固定か可変か、親要素に余白があるか、複数行のテキストを扱うかで使い分けるほうが現実的です。CSSのセンタリングには複数の実装パターンがあり、フレックスボックスとグリッドレイアウトを軸に整理すると選びやすくなるのが基本です。
上下中央配置の結論
結論として、単一要素をもっとも短く上下中央へ配置したい場合はdisplayにgrid、place-itemsにcenterを使う方法が扱いやすいです。複数の子要素を横並びや縦並びで制御するなら、display: flex、align-items、justify-contentを組み合わせるフレックスボックスが向いています。
結果: 期待される表示は、枠の内側でテキストが上下方向と左右方向の中央に置かれた状態です。
- HTML Living Standard
- CSS Snapshot 2024相当の主要ブラウザ実装
- Google Chrome 126 / Firefox 127 / Safari 17.5
これを基準に、親要素の高さをmin-heightで確保し、中央に寄せる処理をplace-itemsへ任せると記述量を抑えられます。ただし、古いブラウザ対応や複雑な行方向の制御が必要な画面では、CSSの別案も候補になります。
- 上下中央に配置するCSSの選び方
- フレックスボックスとグリッドレイアウトの使い分け
- テキスト、画像、カード、モーダルでのセンタリング
- 崩れやすいウェブデザインを避ける余白と高さの考え方
- 公式ドキュメントに沿ったプロパティの確認方法
中央配置で押さえるCSS早見表
中央配置は、親要素、子要素、テキスト行、絶対配置のどこを動かすかで書き方が変わりますし、ここがポイントです。その判断を誤ると、横方向は合っているのに上下だけずれる、スマートフォン幅でカードがはみ出す、といった問題につながります。
具体的には、displayでレイアウト方式を決め、align-itemsやjustify-contentで軸方向をそろえます。テキストだけならtext-alignやline-heightも候補になりますが、複数行や可変高さでは別のCSS設計が必要です。
| 対象 | 主なCSS | 向く場面 | 注意点 | 判断基準 |
|---|---|---|---|---|
| 単一要素 | display: grid / place-items: center | カード内の中央配置 | 親の高さが必要 | 短い記述を優先 |
| 複数要素 | display: flex / align-items | ボタンやナビゲーション | 主軸の向きに注意 | 並び順も制御 |
| 横中央 | margin-inline: auto | 固定幅コンテナ | widthが必要 | 左右余白を自動化 |
| 縦中央 | align-content | 複数行グリッド | 余白の扱いを確認 | 行全体を動かす |
| テキスト横 | text-align: center | 見出しや説明文 | ブロック幅に依存 | 文字だけを中央へ |
| 一行テキスト縦 | line-height | 高さ固定ボタン | 複数行に弱い | 一行限定で採用 |
| 絶対配置 | position: absolute | 重ね合わせUI | 基準要素が必要 | 装飾やモーダル |
| 変形補正 | transform | 50%位置の補正 | 描画位置が変わる | 中心点を合わせる |
| ビューポート | min-height: 100vh | 全画面ヒーロー | モバイルUIに注意 | 画面高を使う |
| 安全な画面高 | min-height: 100svh | スマートフォン画面 | 対応状況を確認 | アドレスバー変動対策 |
| カード群 | grid-template-columns | 一覧ページ | 列幅を調整 | 整列とレスポンシブ |
| 余白調整 | padding | 内側の呼吸感 | 中央配置と混同しない | 見た目の安定 |
| 外側余白 | margin | 要素間の距離 | 相殺に注意 | 周囲との関係 |
| 最大幅 | max-width | 本文コンテナ | 横中央と併用 | 読みやすい幅 |
| 最小幅 | min-width | ボタンや入力欄 | 狭い画面に注意 | 操作領域の確保 |
| 高さ固定 | height | アイコンボタン | 内容増加に弱い | 寸法が確定 |
| 高さ可変 | min-height | 説明付きカード | 余白が伸びる | 内容量に対応 |
| 行間 | line-height | 本文の読みやすさ | 中央配置とは別管理 | 文字の密度調整 |
| 画像 | object-fit | サムネイル | 切り抜きが発生 | 枠内の見え方 |
| 背景画像 | background-position | ヒーロー背景 | 主役の位置に注意 | 画像の焦点調整 |
| インライン | vertical-align | アイコンと文字 | 行ボックス依存 | 小さなずれ補正 |
| 表セル | vertical-align: middle | 表のセル内 | 通常ブロックとは別 | 表形式で利用 |
| 重なり | z-index | モーダルや固定UI | 積層文脈を確認 | 前後関係の制御 |
| 固定表示 | position: fixed | ダイアログ | スクロールとの関係 | 画面基準で配置 |
| 中央の余白 | gap | 並んだ子要素 | 古い対応を確認 | 要素間距離 |
| 折り返し | flex-wrap | タグ一覧 | 行の中央に注意 | 狭い画面対応 |
| 方向変更 | flex-direction | 縦並び中央 | 主軸が入れ替わる | 上下と左右を再確認 |
| 自己整列 | align-self | 一部だけ変更 | 親の指定と衝突 | 個別調整 |
| グリッド内 | justify-self | セル内の横中央 | flexでは使わない | 子要素単位で調整 |
| 表示切替 | display: contents | 構造調整 | アクセシビリティ確認 | 慎重に採用 |
この表の要点は、中央に見せたい対象が文字なのか、箱なのか、複数要素のまとまりなのかを先に切り分けることです。対象が決まれば、CSSの候補は自然に絞られます。
フレックスボックスで上下中央に配置する
フレックスボックスは、親要素の中で子要素を横方向または縦方向に並べながら中央へ寄せたい場面に向いています。display: flexを親へ与えると、子要素はフレックスアイテムとして扱われ、justify-contentとalign-itemsで配置の軸を調整できるのが目安です。
そのとき、初期状態ではflex-direction: rowのため、justify-contentが横方向、align-itemsが上下方向を制御します。縦並びに切り替えると軸の意味が入れ替わるため、中央にならない原因を探す際は主軸を確認すると整理しやすいです。
結果: 期待される表示は、薄い背景の領域内で白いカードが上下左右の中央に配置された状態です。
これにより、カードの高さが少し変わっても中央配置は保たれます。一方、親要素に高さがない場合は上下方向に寄せる余白そのものがないため、min-heightやheightで基準を作る必要があります。
💡 Tips: フレックスボックスの仕様は、MDNのCSS flexible box layoutで確認できるのがポイントです。軸の考え方を押さえると、上下中央と横中央の混同を避けやすくなります。
グリッドレイアウトで短くセンタリングする
グリッドレイアウトは、単一の子要素を中央へ置くときに記述が短くなります。place-items: centerはalign-itemsとjustify-itemsをまとめて扱うため、上下中央と左右中央を同時に整えられますが、これは押さえたい点です。
この書き方は、ログイン画面、空状態メッセージ、読み込み中の表示など、中央に一つのまとまりを置くUIと相性がよいです。ただし、子要素を複数並べて間隔を調整する場合は、gapやgrid-template-rowsも合わせて設計します。
結果: 期待される表示は、画面の高さに対してメッセージ領域が中央に収まり、テキストも横中央にそろう状態です。
その短さから、CSSのセンタリングで迷ったときの候補になりやすい書き方です。グリッドレイアウトの詳細は、MDNのCSS grid layoutにも整理されています。
margin autoで横中央に寄せる
横方向だけ中央に配置したい場合は、margin-inline: autoが自然です。ブロック要素にmax-widthやwidthを持たせ、左右の余白を自動にすると、親要素の中で左右中央に収まります。
ただし、この方法だけでは上下中央にはなりません。記事本文のコンテナ、フォーム、表のラッパーのように、横幅を読みやすく制限するウェブデザインで使うと効果が分かりやすいです。
結果: 期待される表示は、本文コンテナが画面の左右中央に置かれ、狭い画面では内側余白が残る状態です。
この方法は、上下の配置を別のCSSへ分けられる点も扱いやすいです。横中央はmargin-inline、上下の余白はpadding-blockやmin-heightで管理すると、役割が混ざりにくくなります。
positionとtransformで重ねる中央配置
重ね合わせのUIでは、positionとtransformを組み合わせたセンタリングが候補になります。親にposition: relative、子にposition: absoluteを置き、top: 50%とleft: 50%からtranslateで自身の半分を戻するのが一般的です。
このとき、50%は親要素を基準にした位置です。子要素の左上が中央に来るだけでは見た目がずれるため、transform: translate(-50%, -50%)で子要素の中心点を合わせます。
結果: 期待される表示は、画像の中央に再生ボタンが重なって配置された状態です。
その一方で、通常の文書フローから外れるため、周囲の要素との関係は慎重に見ます。モーダルや画像上のボタンには向きますが、本文内カードの上下中央にはフレックスボックスやグリッドレイアウトのほうが扱いやすい場面が多いでしょう。
position: absoluteを使う場合、基準にしたい親要素へposition: relativeを与えます。基準が意図せず画面全体になると、配置が大きくずれることがあるのが現実的です。line-heightで一行テキストを上下中央にする
一行だけのテキストを高さ固定のボタンやラベル内で上下中央に見せるなら、line-heightを使う方法があります。要素のheightとline-heightを同じ値にすると、行ボックスが中央に近い位置へ収まります。
ただし、テキストが折り返す可能性があるUIには向きません。複数行になると行間が過剰になりやすいため、フレックスボックスでalign-items: centerを使う設計へ切り替えますし、これが一つの目安です。
結果: 期待される表示は、黒いボタン内で一行の文字が上下中央に見える状態です。
この方法は、古いUI部品を扱うときに見かける場合があります。新しく作るボタンではdisplay: inline-flex、align-items: center、justify-content: centerを組み合わせるほうが、アイコン付きの配置にも対応しやすいです。
テーブルセルのvertical-alignを使う場面
表のセル内で上下中央にそろえる場合は、vertical-align: middleが使えます。これは通常のブロック要素全般を中央へ動かすためのCSSではなく、表セルやインライン要素の縦方向のそろえ方に関係すると整理できます。
一般に、ページ全体のレイアウトをdisplay: tableで組む方法は採用しにくくなっています。表データにはtable構造を使い、画面レイアウトにはフレックスボックスやグリッドレイアウトを使うと役割が明確です。
結果: 期待される表示は、表のセル内で文字とバッジが縦方向の中央にそろう状態です。
この使い分けを誤ると、ウェブデザインの保守性が下がります。表はデータの関係性を示す構造、CSSレイアウトは要素の配置を決める仕組みとして分けて考えるとよいです。
画面全体で中央に置くヒーロー領域
ヒーロー領域を画面中央に置く場合、min-height: 100vhやmin-height: 100svhで高さを確保します。そのうえで、グリッドレイアウトまたはフレックスボックスを使うと、上下中央の配置を維持できると理解できます。
ただし、スマートフォンではブラウザのアドレスバーにより表示領域が変わります。画面いっぱいのウェブデザインでは、100vhだけに頼らず、必要に応じて100svhや余白の調整を検討します。
結果: 期待される表示は、画面の中央にコピー領域が置かれ、狭い画面でも周囲に余白が残る状態です。
これにより、ファーストビューの印象を保ちながら、文字が端に張り付く問題を避けられます。一方で、次のセクションがまったく見えない設計ではスクロールの存在に気づきにくくなるため、実際の画面構成では高さと余白のバランスを調整します。
画像やアイコンを中央に配置する考え方
画像を枠内の中央に見せたいときは、画像そのものの配置と、画像の切り抜き位置を分けて考えますが、覚えておくと役立つでしょう。要素として中央に置くならdisplay: blockとmargin-inline: auto、枠内で見える位置を整えるならobject-fitとobject-positionを使います。
アイコンと文字を並べるボタンでは、inline-flex、align-items: center、gapがよく合います。これにより、アイコンだけが上下にずれる状態を避けやすくなると覚えるとよいでしょう。
結果: 期待される表示は、チェック記号と文字が同じ高さの中央にそろったボタンです。
このような小さなずれは、画面全体の完成度に影響します。特にフォーム送信、カレンダー、スライドショーなど操作を伴うUIでは、中央揃えの精度が操作の分かりやすさにつながります。
うまく中央にならない原因
中央にならない原因の多くは、親要素の高さ不足、軸の取り違え、余白の混在です。上下中央にするには上下方向の空間が必要であり、親の高さが内容分しかない場合は中央へ寄せる余地がありません。
そのため、min-height、padding、box-sizing、borderの関係を確認すると考えられます。box-sizing: border-boxを使うと、幅や高さに内側余白と枠線を含めて計算でき、レイアウトの見通しがよくなります。
一方、フレックスボックスではflex-directionを変えるとjustify-contentの方向も変わります。横並びのつもりで書いたCSSを縦並びに流用すると、配置の効き方が変わるため注意が必要です。
内部リンクで理解を広げる配置の周辺知識
中央配置の理解は、周辺の要素設計と組み合わせると実務的に使いやすくなります。たとえば、ページ内移動を含むナビゲーションではアンカーリンクの作り方を押さえると、固定ヘッダー下の配置ずれも考えやすくなるのが基本です。
その応用として、日付選択UIを作る場合はカレンダーの作成と更新でセル内の中央揃えが関係します。サムネイルやキャプションを含むUIでは、スライドショーの実装でも画像の中央表示やボタン配置が必要です。
これらの画面では、構造を正しく組むことも欠かせません。親子関係の理解にはツリー構造の基礎が役立ち、入力欄や送信ボタンをそろえる場面では問い合わせフォームの作成も参考になります。
使い分けの実践指針
実装パターンとしてよく見るのは、単一要素ならグリッドレイアウト、複数要素ならフレックスボックス、横幅制限ならmargin-inline: autoという分け方です。これだけで、多くの中央配置は無理なく整理できるのが目安です。
ただし、すべての場面を一つのCSSで済ませようとすると、後から微調整が難しくなります。ウェブデザインでは、要素の役割、親要素の高さ、テキスト量、レスポンシブ時の折り返しを合わせて見る必要があります。
具体的には、ボタン内のアイコンはinline-flex、画面中央の空状態はplace-items、本文コンテナはmax-widthとmargin-inline、重ねるボタンはpositionとtransformという判断になるのがポイントです。CSSのセンタリングは、見た目を合わせる作業であると同時に、構造の意図を明確にする作業でもあります。
そのうえで、中央揃えが崩れた場合は、親の高さ、主軸、余白、ボックスサイズの順に確認します。この順番で見ると、上下中央にできない原因を切り分けやすく、配置の修正も局所的に済みますし、ここを基本と考えるとよいでしょう。
関連記事
- 『HTMLでアンカーリンクを活用する方法10選
- HTMLとJSを使ってカレンダーを作成・更新する方法10選
- HTMLとCSSで手軽に作るスライドショーコピペ12選
- HTMLとツリー構造をマスターする!初心者からプロまでわかる7つの完全ガイド
- HTMLで問い合わせフォームを作成する方法5選!
※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。


