要素を中央寄せにするときに、
margin: 0 auto;
を指定しているのに、marginが効いてくれない!
コーティングを始めたばかりの時のよくある話。 この原因と解決方法をご紹介します。
使用するhtmlはこちら
<!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="style.css"> <title>Webのタブの名前だよ!</title> </head> <body> <div class="oya"> <div class="oya_block"> <p class="block">block</p> </div> </br> <div class="oya_inline"> <span class="inline">inline</span> </div> </div> </body> </html>
ポイント
・pタグにblockという名前をつける・spanタグにinlineという名前をつける
CSSはこちら
.oya { background-color: #dadada; padding: 10px; } .block { margin: 0 auto; } .inline { margin: 0 auto; }
ポイント
・blockという名前がつけた要素にmarginを適用・inlineという名前をつけた要素にmarginを適用
ブラウザでhtmlをひらくと
やはり、marginは効いていません。
視覚的に状況を把握するために、各要素の背景に色をつけてみます。先ほどのcssを編集します。
.oya { background-color: #dadada; padding: 10px; } .oya_block { background-color: white; } .block { margin: 0 auto; background-color: #0596d8; color: white; } .oya_inline { background-color: white; } .inline { margin: 0 auto; background-color: #f72c2c; color: white; }
サイドブラウザを開いてみると
色のついている箇所が違います。これは各要素の”display”の初期値により、”background-color”の適用範囲が異なるために引き起こされます。・<p></p>タグの”display”初期値はblock・<span></span>タグの”display”初期値はinline※blockは画面幅いっぱいに広がろうとする。inlineはできるだけ幅を縮めようとする。(※display値とか要素の適用範囲に関して別に記事を書きます。⇒paddingとかborderとかmarginの話)そしてdispalay値は、margin値の使い方にも影響するため、marginが効かない事例を発生させています。
原因が判明したところで、display値がblock、inlineのときにテキストを中央寄せする方法を具体的に書いてみます。
.oya { background-color: #dadada; padding: 10px; } .oya_block { background-color: white; } .block { margin: 0 auto; width:100px; text-align: center; background-color: #0596d8; color: white; } .oya_inline { background-color: white; text-align: center; } .inline { background-color: #f72c2c; color: white; }
やったこと
.block | .inline | .oya_inline |
widthで要素幅を指定 |
marginを消去。inline値ではmargin値にauto値を指定しても最小値に縮むため。 |
text-alignを追加。spanタグの親要素であるdivタグはblock値のため、span内部の文字を真ん中に移動 |
text-alignで要素幅の真ん中に文字を移動 |
ブラウザで開いてみると
見事二つの要素が中央寄せになりました~めでたしめでたし。
ps
今回は、ある程度コーティングを知っている人向けに記事を書いたので、雑なところがあるけど許してください((苦笑