はじめに
text-align
や vertical-align
を指定しているのにうまく効かなくて困ったことはありませんか?
「text-align: center;
は水平方向に中央寄せしてくれるもの」
「vertical-align: middle;
は垂直方向に中央寄せしてくれるもの」
最初にこう覚えてしまったことがすべての元凶です。
これから新人が入ってきて「うまく効いてくれないんですけどなんでですか?(;o;)」と質問されるかもしれません。そんな事態に備えて、なぜ効かないのか、何を確認したら良いのかをちゃんと説明できるようになっておきましょう!
text-align
とは
「ブロック要素に指定して、要素内のインライン要素の位置を水平方向に変えるもの」です。
CSS: カスケーディングスタイルシート
text-align
が効かない理由
1. ブロック要素に指定していないから
div
や p
などのブロック要素に指定しているかを確認してください。
2.子要素に指定しているから
位置を決める要素自体ではなく、その親要素に指定してください。
指定する要素と位置が決まる要素が異なることを覚えておきましょう。
3. 位置を決める要素がブロック要素だから
text-align
はインライン要素の位置を決めるものなので、いくらブロック要素である親要素に指定していたとしても肝心の位置を決める要素がブロック要素だと効きません。
ブロック要素自体を中央寄せにするには、margin: 0 auto;
を使ってください。
vertical-align
とは
「インライン要素同士を垂直方向に整列するもの」です。
CSS: カスケーディングスタイルシート
vertical-align
が効かない理由
1. ブロック要素に指定しているから
vertical-align
はインライン要素とtableのセル要素に使えるものです。
ブロック要素に指定していても効きません。
インライン要素でもfloat
がかかっていたり、position: absolute;
がかかっていると効かないので注意しましょう。
2. 親要素に指定しているから
子要素に継承されないため、位置を決める要素自体に指定します。
つぶやき
こう見るとこの2つってかなり紛らわしいですよねぇ〜。
参考
CSS「text-align」を理解【効かない場合の対処方法】
CSS text-align:centerが効かない原因と対処法
vertical-alignが効かない人は多分勘違いしている
vertical-alignが効かない時