CSS で div の場合でも文字数と背景の幅を揃える

HTML・PHP・CSS
この投稿は最終更新から9年以上経過しているため、内容が古くなっている可能性があります。

ものすごく基本的なことだったのですが、今更知ったので忘れないうちにメモっておきます。

これまで、文字数の長さに背景やボーダーの長さを合わせるには「span」を使うしかないと思っていました。
でも「span」では上下の margin が効かないんですよね。

例として下のような CSS があるとします。
下線と背景色だけ指定してあります。

CSS
.example-title{
	border-bottom: 1px solid #333;
	background: #ff6347;
	}
HTML
<span class="example-title">これが span で指定した場合</span>
これが span で指定した場合

「span」だと文字数に合わせて、ボーダーと背景の横幅が決まります。

同じものを「div」で指定すると、ブロック要素になってしまうので横幅いっぱいに広がります。

HTML
<div class="example-title">div で指定するとこうなります</span>
div で指定するとこうなります

では、padding や margin はどうなるか確認してみます。
それぞれ上下左右に「padding 10px」と「margin 30px」で指定しました。

CSS
.example-title-2{
	border-bottom: 1px solid #333;
	background: #ff6347;
	padding: 10px;
	margin:  30px;
	}
これが span で指定した場合

span の場合、padding は上下左右に効きますが、margin は左右にしか効きません。
padding だけが効いた結果、下の文字に被ってしまっています。

一方、div の場合は padding margin ともに上下左右に効きます。

div で指定するとこうなります

上下に margin を取りながら文字数と背景の幅を合わせたい!
そんな時には div をインライン要素にしてしまいます。

display: inline-block; を使う

「div」要素を「display: inline-block;」にするだけで解決します。
CSSに「display: inline-block;」を追加します。

CSS
.example-title-3{
	border-bottom: 1px solid #333;
	background: #ff6347;
	padding: 10px;
	margin:  30px;
	display: inline-block;
	}
HTML
<div class="example-title-3">div 要素で指定しています</div>
div 要素で指定しています

これで div 要素の背景を文字幅に合わせて、上下に margin を取ることができます。