センタリング(中央揃え・中央寄せ)

トップ > アラカルト > センタリング(中央揃え・中央寄せ)
この記事は古いものです。新しい情報は こちら を参照してください。

目次

テキストを左右にセンタリングする

<center> を用いる方法 (非推奨)

古い HTML では <center> を用いていましたが、見栄えを HTML で制御するのはよくないというポリシーにより廃止されていますので、使用すべきではありません。

HTML
<center>text</center>
align="center" を用いる方法 (非推奨)

align 属性も廃止されていますので、使用すべきではありません。

HTML
<div align="center">text</div>
text-align を用いる方法 (おススメ)

テキストを左右にセンタリングするには スタイルシートtext-align を用います。

HTML
<div style="text-align:center; height:6rem; border:1px solid gray;">
  text
</div>
表示
text

テキストを上下にセンタリングする

vertical-align を用いる方法

縦方向のアライメントを制御する vertical-align がありますが、これは、基準となるテキストの位置に対して画像などの位置を決めるもので、テーブル以外で使用する場合は、親要素の中央ではなく、基準となるテキストの高さの中央に表示されてしまいます。

HTML
<div style="font-size:40pt; height:6rem; border:1px solid gray;">
  <span>TEXT</span>
  <img style="vertical-align:middle" src="../image/popase.gif" alt="Sample image">
  <span style="vertical-align:middle; font-size:10pt">text</span>
  <span>TEXT</span>
</div>
表示
TEXT Sample image text TEXT
<td> と vertical-align を用いる方法

vertical-align は、テーブル要素の <th>, <td> で使用した場合は、親要素である th や td の縦方向の中央に表示します。ただし、テーブルをレイアウトの目的で使用することは推奨されていません。

HTML
<table style="width:100%; height:6rem; border:1px solid gray;">
  <tr>
    <td style="vertical-align:middle;">text</td>
  </tr>
</table>
表示
text
table-cell と vertical-align を用いる方法

親要素を display で table-cell にしてやれば、th, td と同様、親要素の縦方向の中央に表示することができます。table-cell はさらに親要素を display:table にしてやらないと width を指定することができないこと、display:table-cell の要素には min-heightmin-with を指定できない点に注意してください。

HTML
<div style="display:table; width:100%; height:6rem;">
  <div style="display:table-cell; vertical-align:middle; border:1px solid gray;">
    text
  </div>
</div>
表示
text
line-height を用いる方法

親要素の line-height を親要素の高さにそろえることで、センタリングする方法もよく用いられます。ただし、テキストが1行のみの場合に限られます。

HTML
<div style="vertical-align:middle; line-height:6rem; height:6rem; border:1px solid gray;">
  text
</div>
表示
text
grid と align-content を用いる方法(おススメ)

親要素を グリッドコンテナ にして align-content で上下中央に表示します。align-content の代わりに justify-content にすれば左右中央に、place-content にすれば上下左右中央に表示されます。

HTML
<div style="display:grid; align-content:center; height:6rem; border:1px solid gray;">
  text1<br>text2
</div>
表示
text1
text2

ブロック要素を左右にセンタリングする

text-align を用いる方法

text-align はテキストに対して用いるものなので、ブロック要素に対して指定しても無視されます。

HTML
<div style="text-align:center; height:6rem; border:1px solid gray;">
  <div style="width:5rem; height:3rem; background:#f99;">text</div>
</div>
表示
text

子要素を inline-block にしてやることで text-align が効くようにすることもできます。ただし、子要素の中身まで text-aligh が効いてしまうので注意してください。

HTML
<div style="text-align:center; height:6rem; border:1px solid gray;">
  <div style="display:inline-block; width:5rem; height:3rem; background:#f99;">text</div>
</div>
表示
text
margin:auto を用いる方法

ブロック要素を左右にセンタリングするには、子要素の margin-rightmargin-left に auto を指定します。左右のマージンを自動にすることで、右マージンと左マージンが自動調整され、中央表示となります。センタリングがブロック要素の中身まで影響を及ぼすことはありません。

HTML
<div style="height:6rem; border:1px solid gray;">
  <div style="margin-right:auto; margin-left:auto; ; width:5rem; height:3rem; background:#f99;">text</div>
</div>
表示
text
flex と justify-content を用いる方法 (おススメ)

近年では flexjustify-content を用いるのが一般的になってきています。[対応ブラウザ]

HTML
<div style="display:flex; justify-content:center; height:6rem; border:1px solid gray;">
  <div style="width:5rem; height:3rem; background:#f99;">text</div>
</div>
表示
text

ブロック要素を上下にセンタリングする

table-cell と vertical-align を用いる方法

テキストと同様、<td>display:table-cell と vertical-align を組み合わせて上下にセンタリングする方法です。display:table を使用しないと width を設定できないこと、display:table-cell には min-height, min-width を指定できないことに注意してください。

HTML
<div style="display:table; width:100%;">
  <div style="display:table-cell; vertical-align:middle; height:6rem; border:1px solid gray;">
    <div style="width:5rem; height:3rem; background:#f99;">text</div>
  </div>
</div>
表示
text
margin:auto を用いる方法

左右の場合に margin:auto を指定したのと同様、上下も margin-topmargin-bottom に auto を指定する方法です。ただし、上下の場合は親要素を relative、子要素を abosolute とし、top:0, bottom:0 を指定する必要があります。

HTML
<div style="position:relative; height:6rem; border:1px solid gray;">
  <div style="position:absolute; top:0; bottom:0; margin-top:auto; margin-bottom:auto;
     width:5rem; height:3rem; background:#f99;">text</div>
</div>
表示
text
flex と align-items を用いる方法 (おススメ)

上下の場合も現在では flexalign-items を用いるのがおすすめです。

HTML
<div style="display:flex; align-items:center; height:6rem; border:1px solid gray;">
  <div style="width:5rem; height:3rem; background:#f99;">text</div>
</pre>
表示
text

ブロックを上下左右にセンタリングする

下記のHTMLをターゲットにセンタリングします。

HTML
<div class="container">
  <div class="parent">
    <div class="child">
      いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん
    </div>
  </div>
</div>

あらかじめ、下記の CSS が設定されているとします。

CSS
.parent {
  border: 1px solid #888;
  width: 100%;
  height: 6rem;
}
.child {
  background: #ddd;
  width: 50%;
}
text-align と vertical-align を用いる方法

インラインブロックに対しては text-align で左右中央を指定できるので、子要素を inline-block とし、親要素に text-align:center を指定します。テーブルセルに対しては vertical-align で上下中央を指定できるので、親要素を table-cell とし、vertical-align:middle を指定します。display:table-cell は 親要素に display:table を指定しないと width をうまく設定できないので、さらなる親要素に display:table を指定します。子要素の中身に対してもセンタリングが適用されてしまう点と、table-cell に対しては min-height や min-width を適用できない点に注意してください。

CSS
.container {
  display: table;
  width: 100%;
}
.parent {
  text-align: center;
  display: table-cell;
  vertical-align: middle;
}
.child {
  display: inline-block;
}
表示
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん
margin:auto を用いる方法

左右のセンタリングであれば margin-right:auto と margin-left:auto を指定すればよいのですが、上下左右をセンタリングする場合は、親要素を relative、子要素を absolute にし、top, left, bottom, right に 0 を指定し、高さを指定した上で margin を auto にする必要があります。子要素の高さを固定で指定する必要があるのが欠点です。

CSS
.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0; 
  right: 0;
  height: 4rem;
  margin: auto;
}
表示
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん
transform を用いる方法

親要素を relative、子要素を absolute にして、子要素の左上端を親要素の 50%, 50% の位置に表示し、さらに transform を用いて子要素の高さ・横幅の 50% だけマイナス方向に移動する方法です。次に紹介する flex による方法が普及するまでのテクニックとして利用されていました。子要素の高さを指定する必要がありません。

CSS
.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateY(-50%) translateX(-50%);
}
表示
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん
flex と justify-content と align-items を用いる方法 (おススメ)

現在では flex を用いるのが最もおススメです。親要素をフレックス、子要素をフレックスアイテムとし、子要素を justify-content で横方向に、align-items で縦方向にセンタリングします。

CSS
.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}
表示
いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん

Copyright (C) 2022 杜甫々
初版:2022年3月20日 最終更新:2022年3月20日
http://www.tohoho-web.com/ex/centering.html