CSSでdisplayの違いを図解で理解!block・inline・inline-blockの使い方
生徒
「CSSで要素の表示方法が違うって聞きました。blockとかinlineとかinline-blockって何ですか?」
先生
「それぞれの要素の表示方法を決めるプロパティがdisplayです。blockはブロック要素、inlineはインライン要素、inline-blockはその中間的な要素を作ります。」
生徒
「具体的にどう違うんですか?」
先生
「わかりやすく図で説明しますね。blockは横幅いっぱいを使い、新しい行に表示されます。inlineは文字のように横に並びます。inline-blockは横に並びますが、高さや幅を指定できます。」
1. display: blockとは
blockはボックスが常に新しい行から始まる表示方法です。幅はデフォルトで親要素いっぱいになります。見出しや段落などがblockです。
<style>
.block-box {
display: block;
width: 200px;
background-color: lightblue;
margin-bottom: 10px;
padding: 5px;
}
</style>
<div class="block-box">block要素1</div>
<div class="block-box">block要素2</div>
ブラウザ表示
2. display: inlineとは
inlineは文字やリンクのように横に並ぶ表示方法です。高さや幅は指定できず、文字と同じラインに表示されます。
<style>
.inline-box {
display: inline;
background-color: lightgreen;
margin-right: 5px;
padding: 5px;
}
</style>
<span class="inline-box">inline1</span>
<span class="inline-box">inline2</span>
<span class="inline-box">inline3</span>
ブラウザ表示
3. display: inline-blockとは
inline-blockは横に並びながらも、widthやheightが指定できる表示方法です。デザインを調整したい場合に便利です。
<style>
.inline-block-box {
display: inline-block;
width: 100px;
height: 50px;
background-color: lightcoral;
margin-right: 5px;
text-align: center;
vertical-align: middle;
line-height: 50px;
}
</style>
<div class="inline-block-box">box1</div>
<div class="inline-block-box">box2</div>
<div class="inline-block-box">box3</div>
ブラウザ表示
4. 使い分けのポイント
文章や見出しのように新しい行で表示したい場合はblock。文字やリンクのように横に並べたい場合はinline。ボックスを横に並べたいけど大きさも調整したい場合はinline-blockを使います。これを理解すると、CSSのレイアウトがぐっと簡単になります。
5. 初心者向けの活用例
- メニューの横並びボタンはinline-block
- 段落や見出しはblock
- 文字装飾やリンクはinline
これらを組み合わせることで、自然なウェブページデザインが可能になります。特にinline-blockはレスポンシブデザインでも便利です。
まとめ
ウェブサイトのデザインを構築する上で、CSSのdisplayプロパティを正しく理解することは、レイアウト崩れを防ぎ、意図通りの外観を実現するための最も重要なステップの一つです。これまで解説してきた通り、HTML要素にはそれぞれデフォルトの表示形式が存在しますが、CSSのdisplayプロパティを上書きすることで、その性質を自由に変更することができます。
あらためて、主要な3つの値について振り返ってみましょう。 まずは「display: block;」です。これは、要素が画面の横幅いっぱいに広がり、前後に改行が入る性質を持っています。divタグ、h1〜h6タグ、pタグなどがこれに該当します。構造を作るための「箱」として機能し、width(幅)やheight(高さ)を自由に指定できるほか、上下左右のmargin(外側の余白)やpadding(内側の余白)が正確に反映されるのが特徴です。
次に「display: inline;」です。これは文章の中の一部として扱われる要素で、spanタグ、aタグ、strongタグなどがデフォルトでこの設定になっています。横に並ぶという性質がありますが、widthやheightを指定することができず、上下のmarginも反映されません。主にテキストの装飾や、リンクの設定など、文章の流れを止めずに特定の箇所を指定したい場合に活用されます。
そして、最も柔軟性が高いのが「display: inline-block;」です。これは「横に並ぶ」というinlineの長所と、「サイズ指定ができる」というblockの長所を兼ね備えたハイブリッドな設定です。ナビゲーションメニューのボタンを横に並べたり、画像を説明文の横に配置したりする際に非常に重宝します。
各プロパティの比較表
それぞれの違いを整理するために、以下の表で特性を比較してみましょう。これを頭に入れておくだけで、コーディングのスピードが格段に上がります。
| 特性 | block | inline | inline-block |
|---|---|---|---|
| 改行 | 入る(縦に並ぶ) | 入らない(横に並ぶ) | 入らない(横に並ぶ) |
| 幅・高さの指定 | 可能 | 不可 | 可能 |
| 余白(上下) | 適用される | 適用されない | 適用される |
| 主な用途 | 見出し、段落、外枠 | 文章内の装飾、リンク | ボタン、カード型の横並び |
実践的なコード例:カードレイアウトの作成
実際の現場でよく使われる、inline-blockを利用した画像付きカードの横並びレイアウトを作成してみましょう。block要素であるdivをinline-blockに変えることで、簡単に横並びのリストを作成できます。
<style>
.card-container {
padding: 20px;
background-color: #f8f9fa;
}
.item-card {
display: inline-block;
width: 160px;
margin: 10px;
padding: 10px;
background-color: #ffffff;
border: 1px solid #ddd;
border-radius: 8px;
text-align: center;
vertical-align: top;
box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
}
.item-card img {
width: 120px;
height: 120px;
border-radius: 4px;
margin-bottom: 8px;
}
.item-card p {
font-size: 14px;
color: #333;
margin: 0;
}
</style>
<div class="card-container">
<div class="item-card">
<img src="/img/sample120-120.jpg" alt="サンプル画像1">
<p>商品アイテムA</p>
</div>
<div class="item-card">
<img src="/img/sample120-120.jpg" alt="サンプル画像2">
<p>商品アイテムB</p>
</div>
<div class="item-card">
<img src="/img/sample120-120.jpg" alt="サンプル画像3">
<p>商品アイテムC</p>
</div>
</div>
ブラウザ表示
このように、displayを使い分けることで、複雑なレイアウトもシンプルに記述できるようになります。特に最近ではFlexbox(display: flex)を使用することも多いですが、その基礎となるのはこれらの概念です。要素がどの程度の空間を占有し、どのように配置されるのかを常に意識して、読みやすくメンテナンス性の高いコードを目指しましょう。
生徒
先生、ありがとうございました!displayの意味がようやく腑に落ちました。今まで「なんでこのボタンは幅が効かないんだろう?」って悩んでいたのは、その要素がinlineだったからなんですね。
先生
その通りです!よくある落とし穴ですよね。aタグやspanタグにサイズを指定したいときは、まずdisplayをinline-blockかblockに変更する必要があるんです。そこに気づけたのは大きな進歩ですよ。
生徒
はい。あと、inline-blockの便利さにも驚きました。横に並べたいけど、ちゃんと余白やサイズも管理したいっていう時にぴったりですね。実際のサイトのメニューとか、商品の一覧画面とかでよく見かける気がします。
先生
そうですね。ちなみに、inline-blockを使うと要素の間にわずかな「隙間」が空くことがあるんですが、それはHTML上の改行やスペースが反映されてしまうからなんです。そういった細かい挙動も、これから作っていく中で学んでいきましょう。
生徒
隙間ですか……。奥が深いですね。でも、基本の3つの違いがわかったので、これからは迷わずにスタイルを当てられそうです。次はもっと複雑なレイアウトにも挑戦してみたいです!
先生
その意気です!CSSは実際に書いてみて、ブラウザでどう変わるかを確認するのが一番の近道です。今回学んだblock、inline、inline-blockの特性を忘れずに、色々なデザインを試してみてくださいね。何か詰まったら、いつでも聞いてください。
生徒
ありがとうございます!まずは自分で色々なタグのdisplayを書き換えて、動きをじっくり観察してみることにします!