上下中央配置に悩める初心者コーダーにおくる4つの解決法

垂直方向センタリング

シンプルに見えて意外と難しいのが「上下中央配置」。
並べる要素の高さが同じ場合は何とかやり過ごせますが、異なる高さの要素や、画像+テキストという組み合わせを上下中央に配置したい場面に出くわすこともよくあります。
そんな時、スムーズに解決できる記述方法をご紹介します。

【パターン1】インライン要素を上下中央に配置したい

  • 対象要素:imgやspanなどのインライン要素やtable-cell
  • 使い方:適用させたい要素にそのまま記述
  • 注意点:divやp等のブロックレベル要素には効かない

html

	<div>
	こねこ盛り
	こねこ盛り
	</div>

css

img {
	vertical-align:middle;
}

例

こねこ盛り こねこ盛り

【パターン2】親要素の高さを揃え、子要素を上下中央に配置したい

  • 対象要素:インライン要素、ブロック要素
  • 使い方:親要素にdisplay: table;を指定、対象要素にdisplay: table-cellを適用
  • 注意点:高さ指定が必ず必要、IE8以上対応(IE6,7未対応)

html

	<div>
	<p>BOX1</p>
	<p>BOX2</p>
	<p>BOX3</p>
	</div>

css

div {
	display:table;
}
p {
	display:table-cell;
	vertical-align:middle;
	height:200px;
}

例

BOX1

BOX2

BOX3

IE7に対応させるには

使い勝手の良いdisplay: table-cellですが、対応しているのはIE8からです。
まだIE7で閲覧しているユーザーがいる場合は、以下のハックを追加しておくと◎です。

css(IE7ハック)

/*for IE7 */
	*:first-child+html p {
	display: inline;
	zoom: 1;
}
※*:first-child+htmlはIE7のハックのようです

【パターン3】幅や高さの異なる要素を上下左右中央に配置したい

  • 対象要素:インライン要素、ブロック要素
  • 使い方:親要素にposition: absolute;もしくはposition: relative;を、適用させたい要素そのものにposition:absolute;を記述し、top,right,bottom,leftに0を指定
  • 注意点:IE8以上対応(IE6,7未対応)

html

	<div>
	こねこ盛り
	</div>

css

div {
	position:relative;
	background:#C4F8FF;
}
img {
	margin:auto;
	position:absolute;
	top:0;
	right:0;
	bottom:0;
	left:0;
}

例

 親要素 こねこ盛り

【パターン4】高さ指定をせずに上下中央に配置したい

  • 対象要素:インライン要素、ブロック要素
  • 使い方:positionとtransformで位置調整
  • 注意点:IE9以上対応(IE6,7,8未対応)、ベンダープレフィックスの付与が必要

html

	<div>
	<p>こねこ盛り</p>
	</div>

css

div {
	display:table;
}
p {
	position:relative;
	top:50%; /* topから50%の位置に配置 */
	transform: translateY(-50%); /* 要素自体の高さの50%を上方向へ移動 */
}

さらに、スマホ対応でベンダープレフィックスを付与すると以下の記述になります。

p {
	position:relative;
	top:50%; /* topから50%の位置に配置 */
	-webkit-transform: translateY(-50%);
	-ms-transform: translateY(-50%);
	transform: translateY(-50%); /* 要素自体の高さの50%を上方向へ移動 */
}

例

 親要素

こねこ盛り

[補足]レイアウトイメージ

まず、子要素を親要素のtopから親要素の50%分下へ移動させます。
さらに子要素自身の高さ50%分をtransformで上に移動させると、上下中央に配置されます。

上下中央配置イメージ

このように同じレイアウトでもいくつかの方法があり、状況に応じて適用させるべきcssがだんだんとわかってきます。
慣れてきたらこのようにいくつかのレイアウトパターンを洗い出し、Dreamweaver等にある(※)スニペット機能を活用してストックしていくと作業効率もUPしておすすめです!
(※)スニペット機能…よく使うコードをすぐ使えるように保存できる機能

この記事は
なぽりたんが書きました。
入社2014年
出身地 神奈川県
スキルデザイン・写真撮影・登山・サイクリング

今日のひとこと:サッカー選手の名前しりとりにハマってます

サイト内検索
TOP