Help us understand the problem. What is going on with this article?

テキストの縦方向の中央揃えについて

More than 3 years have passed since last update.

ボックス要素の中にテキストが入る場合、縦方向の中央に揃えたいときがあると思います。
その場合どのように配置しているでしょうか。

インライン要素の場合は「vertical-align: middle;」を使えば中央に揃えことができるのですが、
pタグのようなボックス要素の中にテキストを入れたい場合、
うまいこと配置できないことがあり、
今回は、縦方向の中央揃えについて調べてみました。

HTML
<p class="box">DEMO</p>
CSS
.box {
 width: 180px;
 height: 180px;
 border: 1px solid #ccc;
 vertical-align: middle; /* 「vertical-align」を指定してもテキストは縦方向中央揃いにならない */
 text-align: center;
}

上のHTML、CSSをつかって、新たにCSSを追加していきたいと思います。

DEMO

テキストが1行のみで「line-height」を使う場合

確実にテキストが1行のみという時は、line-heightがシンプルでいいですね。しかし、テキストが2行以上になってしまった場合は崩れてしまうので注意が必要です。

CSS
.line-height {
 line-height: 180px;
}

DEMO

「display: table-cell」を使う場合

「display: table-cell」を使ってテキストを縦方向の中央に揃えたい場合は、
height、vertical-alignの指定が必要になります。今回の場合、heightは.boxにすでに指定してあるので、

CSS
.table-cell {
 display: table-cell; /* IE8から使用可能 */
 vertical-align: middle;
}

を新たに追加することで、テキストを縦方向中央揃えにすることが出来ました。
注意することはtable-cellはIE8から対応ということです。

DEMO

Flexible boxを使う

「display: flex;」、
「align-items: center;」、
「justify-content: center;」を組み合わせることによってテキストを縦と横方向の中央に揃えることもできます。
新たに追加したCSSは下記になリます。

CSS
.flexiblebox {
 display: -webkit-flex;
 display: flex;
 -webkit-align-items: center; /* 縦方向中央揃え(Safari用) */
 align-items: center; /* 縦方向中央揃え */
 -webkit-justify-content: center; /* 横方向中央揃え(Safari用) */
 justify-content: center; /* 横方向中央揃え */
}

上に書いてあるCSSは各ブラウザの最新バージョンを対象とした書き方です。
Flexible boxはブラウザのバージョンによってプロパティが変わったりと扱い方が難しいです。ChromeやFirefoxの最新バージョンであれば気にする必要がありませんが、IEは最新バージョン(IE11)のみ対応、Safariは最新バージョンでさえベンダープレフィックスが必要になります。今の状態ではまだ使う機会が少なそうなのが残念です。
もし使う場合、「Autoprefixer」のようなWEBツールを使ってブラウザのバージョンごとの対応方法を調べることをおすすめします。

DEMO

最後に

調べてみて分かったことは、Flexible boxがもっと多くのブラウザに対応していたら...と思いました。最新ブラウザになるとベンダープレフィックスを付けなくて良かったり、プロパティの数も減るので、バージョンの古いブラウザに比べると使いやすそうです。
Flexible boxには他にも便利なプロパティがあり、floatを使わずに要素を横並びにしたり、横並びにしたものを等間隔で並べるといったことも簡単に指定することが出来ます。現時点では対応ブラウザが限られてしまいますが今後使うことが増えていくかもしれません。


参考:
Flexible box対応ブラウザ
これからのCSSレイアウトはFlexboxで決まり!
CSS3 Flexbox の各プロパティの使い方をヴィジュアルで詳しく解説

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away