CSS ・ レイアウト

ボックスの種類

ブロック・インライン・インラインブロック

HTMLの要素は、表示のされ方によって「ブロックボックス」「インラインボックス」「インラインブロックボックス」の3種類に分けて考えられます。横幅・高さの扱いと、横に並ぶかどうかが違います。

種類
ブロック / インライン / インラインブロック
変更方法
display: block / inline / inline-block
使う場面
幅が効かない・横に並ばないときの原因探し
01

サンプルコード

HTML
1<p class="label">ブロック(div)</p>
2<div class="block">div</div>
3<div class="block w">width: 120px の div</div>
4<p class="label">インライン(a)</p>
5<a class="inline" href="#">a テキスト</a>
6<a class="inline" href="#">a テキストです</a>
7<p class="label">インラインブロック(display: inline-block)</p>
8<span class="ib">幅120px</span>
9<span class="ib">幅120px</span>
CSS
1.label {
2 margin: 8px 0 4px;
3 font-size: 12px;
4}
5.block, .inline, .ib {
6 padding: 4px 8px;
7 background: #b68235;
8 color: #fff;
9 font-size: 13px;
10}
11.block {
12 margin-bottom: 4px;
13}
14.w {
15 width: 120px;
16}
17.inline {
18 width: 300px; /* インラインなので効かない */
19}
20.ib {
21 display: inline-block;
22 width: 120px;
23 height: 40px;
24}
02

実行結果

ブラウザでの表示ブロックは幅を決めても横に何も入り込みません。インラインは width が効かず、インラインブロックは幅・高さが効いたまま横に並びます
03

解説

ブロックボックス(ブロック要素)は、親要素の横幅いっぱいに広がります。初期状態では、下に書いたコンテンツが横に割り込むことはなく、width などで幅を決めても、空いた隙間にコンテンツが滑り込むことはありません。普段使うタグのほとんどはブロックボックスと考えてOKです。

インラインボックス(インライン要素)は、横幅や高さが包んでいる中身の分しかありません(=width・height を設定できない)。ブロック要素の中で文章の一部として登場することが多いですが、単独でも使えます。何も指定がなければ、横幅に余裕があるだけ横に並び、空いているスペースに入り込もうとします。

インラインブロックボックス(インラインブロック要素)は、ブロックとインライン両方の性質を併せ持ちます。幅と高さを設定でき、指定がなければ要素自体が本来持っている幅と高さで表示されます。前の要素がインラインやインラインブロックのときは、空いている部分に入り込もうとします(横に並びます)。画像を挿入する img タグや、Googleマップで使う iframe タグがこれにあたります。

どの種類にするかは CSS の display で変更できます。ブロックボックスにするなら display: block;、インラインボックスなら display: inline;、インラインブロックボックスなら display: inline-block; と書きます。

04

応用例・注意点

3種類の比較

種類説明
ブロック(block)横幅いっぱいに広がり縦に積まれる。幅・高さを指定できる。例:div, p, h1〜h6, ul
インライン(inline)中身の分の大きさで横に並ぶ。幅・高さは指定できない。例:a, span, strong, i, em, b, br, time, u
インラインブロック(inline-block)横に並びつつ、幅・高さを指定できる。例:img, iframe

リンクをボタンのような大きさにする

a はインラインなので width・height が効きません。display: inline-block にすると、横に並んだまま大きさを指定できます。

HTML
1<a class="btn" href="#">お問い合わせ</a>
CSS
1.btn {
2 display: inline-block;
3 width: 200px;
4 padding: 12px 0;
5 text-align: center;
6}

画像の下にできる隙間を消す

img はインラインブロックとして文字と同じ行に置かれるため、下に少し隙間ができます。display: block にすると消えます。

CSS
1img {
2 display: block;
3}

注意点

  1. 01厳密には、HTML Living Standard では「ブロック要素」「インライン要素」という分類はもう存在しません。ただし、CSS でレイアウトするときは実質同じ働きをするので、この3種類で考えると理解しやすくなります。
  2. 02インライン要素には上下の margin も効きません。余白を付けたいときは inline-block か block に変更します。
↑↓ 選択Enter 移動Esc 閉じるCtrl K⌘K で開閉