Web制作において、要素の並び方を制御するCSSのdisplayプロパティは非常に重要な役割を果たします。
その中でも、インライン要素とブロックレベル要素の両方の特徴を併せ持つ「インラインブロック要素」は、レイアウトの微調整に欠かせない存在です。
本記事では、インラインブロック要素の基本的な定義から、具体的な活用方法、さらには他の要素との違いについて詳しく解説します。
初心者の方でも理解しやすいように、実際のコード例や比較表を用いて、その仕組みを紐解いていきましょう。
インラインブロック要素とは何か
インラインブロック要素とは、CSSのdisplay: inline-block;を指定することで適用される表示形式のことです。
HTMLの要素は、標準の状態では大きく分けて「ブロックレベル要素」か「インライン要素」のどちらかに分類されています。
しかし、デザインの要件によっては、「横に並べたいけれども、幅や高さも自由に指定したい」という場面が多々あります。
そのような要望を叶えるために用意されたのが、インラインブロック要素というハイブリッドな性質を持つ形式です。
まずは、インラインブロック要素が持つ主な特徴を整理してみましょう。
インラインブロック要素の主な性質
インラインブロック要素は、要素の並び方はインライン要素のように振る舞い、要素の中身はブロックレベル要素のように振る舞います。
具体的には、「改行されずに横に並ぶ」という性質と、「幅や高さ、余白を自由に設定できる」という性質を同時に持っています。
これにより、テキストの流れの中にボタンを配置したり、カード状のパーツを横に並べたりする表現が可能になります。
また、親要素にtext-align: center;を指定することで、中央揃えにできるという便利な側面も持っています。
3つの表示形式の違いを比較
インラインブロック要素を正しく理解するためには、比較対象となる「ブロックレベル要素」と「インライン要素」の違いを知ることが不可欠です。
それぞれの要素が持つ制限や特徴を比較表にまとめました。
| 特徴 | ブロックレベル要素 | インライン要素 | インラインブロック要素 |
|---|---|---|---|
| 並び方 | 縦に積まれる(改行される) | 横に並ぶ | 横に並ぶ |
| 幅・高さの指定 | 可能 | 不可能(中身に依存) | 可能 |
| 上下のマージン | 適用される | 適用されない | 適用される |
| 親要素での中央寄せ | margin: auto; | text-align: center; | text-align: center; |
この表からわかるように、インラインブロック要素は両方の「良いとこ取り」をした性質を持っています。
ブロックレベル要素の特徴
ブロックレベル要素は、<div>や<p>、<h1>などが該当します。
これらは、要素の前後で必ず改行が入り、1つの大きな塊(ブロック)として扱われます。
デフォルトの状態では親要素の幅いっぱいに広がるため、明示的に幅を指定しない限り、横に他の要素を並べることはできません。
インライン要素の特徴
インライン要素は、<span>や<a>、<strong>などが該当します。
これらは文章の一部として扱われるため、横に並んで表示されます。
しかし、width(幅)やheight(高さ)といったプロパティを指定しても無視されるという制約があります。
また、上下のmargin(外側の余白)が正しく適用されないため、レイアウトの調整には向きません。
インラインブロック要素のメリット
インラインブロック要素は、上述したインライン要素の「サイズ指定ができない」という欠点を克服しています。
「横並びのメニューを作りたいが、各メニューの大きさを固定したい」という場合には、まさに最適な選択肢となります。
CSSでのインラインブロック要素の使い方
実際にインラインブロック要素をCSSで指定する方法を確認しましょう。
非常にシンプルで、対象の要素に対してdisplay: inline-block;を記述するだけです。
/* クラス名「box」をインラインブロック要素にする */
.box {
display: inline-block;
width: 150px;
height: 100px;
background-color: #f0f0f0;
margin: 10px;
padding: 20px;
border: 1px solid #333;
text-align: center;
}
このように記述することで、本来であれば縦に並ぶ<div>要素なども、横に並べつつサイズを保持することができます。
基本的なレイアウトのコード例
実際に3つの要素を横に並べるHTMLとCSSの例を見てみましょう。
<div class="container">
<div class="item">アイテム1</div>
<div class="item">アイテム2</div>
<div class="item">アイテム3</div>
</div>
.container {
text-align: center; /* 子要素を中央に寄せる */
}
.item {
display: inline-block; /* インラインブロック化 */
width: 100px;
background-color: skyblue;
padding: 10px;
}
このコードを実行すると、3つの青いボックスが画面中央に横一列で並びます。
もしこれがブロックレベル要素であれば、それぞれが改行されて縦に3つ並ぶことになります。
よく使われる活用シーン
インラインブロック要素がどのような場面で使われるのか、具体的なケースをいくつか紹介します。
1. ナビゲーションメニュー
Webサイトの上部によく見られる「グローバルナビゲーション」は、代表的な活用例です。
<li>タグは本来ブロックレベル要素ですが、これをインラインブロック化することで横に並べることができます。
aタグをインラインブロックにすれば、リンクのクリック範囲をボタンのように広げることも可能です。
2. ページネーション(ページ送り)
ブログ記事の一覧ページなどで、ページ番号が横に並んでいる部分もインラインブロック要素が多用されます。
各番号の枠のサイズを一定に保ちつつ、中央揃えにするために非常に適しています。
3. カード型のリスト
商品一覧やサービス紹介などで、画像と説明がセットになったカード状のパーツを複数並べる際にも便利です。
Flexboxが主流になる前は、このインラインブロックを用いた手法が横並びレイアウトの主流でした。
現在でも、単純な要素の羅列であれば、複雑な指定が不要なインラインブロックが使われることがあります。
インラインブロック要素を使う際の注意点
非常に便利なインラインブロック要素ですが、特有の挙動による注意点も存在します。
これを知っておかないと、思い通りにレイアウトできない場合があるため、しっかり押さえておきましょう。
1. 要素間の謎の隙間問題
インラインブロック要素を横に並べると、コード上の改行や半角スペースが「数ピクセルの隙間」として表示されてしまいます。
CSSでmargin: 0;を指定していても、要素同士がピッタリくっつかない現象です。
これは、ブラウザがHTMLコード内の改行を「1つの半角スペース」として解釈するために発生します。
隙間を解消する方法
この隙間を消すためには、いくつかの対処法があります。
- 親要素に
font-size: 0;を指定し、子要素でフォントサイズを戻す。 - HTMLコードで要素間の改行を消して、タグを繋げて記述する。
- HTMLの終了タグと開始タグをコメントアウトで繋ぐ。
最近では、メンテナンス性を考慮して、親要素にfont-size: 0;を適用する方法が一般的です。
2. 垂直方向の揃え位置(vertical-align)
インラインブロック要素は、横に並んだ際の「高さの基準」をどこに置くかを決める必要があります。
デフォルトではvertical-align: baseline;が適用されており、中身のテキストの基線に合わせて整列します。
そのため、要素内の中身の量が異なると、要素自体の上下の位置がズレてしまうことがあります。
これを防ぐためには、vertical-align: top;やmiddle;を明示的に指定することが重要です。
.item {
display: inline-block;
vertical-align: top; /* 上端で揃える */
}
この一行を追加するだけで、中身の量に関わらずボックスの上が綺麗に揃うようになります。
FlexboxやGridとの使い分け
現代のWeb制作では、レイアウト手法としてdisplay: flex;(Flexbox)やdisplay: grid;(CSS Grid)が頻繁に使われます。
では、インラインブロック要素はもう古い技術なのでしょうか?
結論から言えば、目的によって使い分けるのが正解です。
インラインブロックが適している場合
文章の中にアイコンや小さなボタンを埋め込みたい場合など、「インライン的な流れを維持しつつ、サイズを制御したい」ときにはインラインブロックが最適です。
また、古いブラウザへの対応が必要な場合も、インラインブロックは非常に安定した動作を見せます。
親要素の幅に合わせて自然に折り返してほしい、かつ各要素のサイズを固定したいといった単純なケースにも向いています。
Flexboxが適している場合
複雑なレイアウトや、要素の順序変更、等間隔の配置、高さの自動的な統一などを行いたい場合は、Flexboxが圧倒的に便利です。
隙間問題に悩まされることもなく、より直感的にレスポンシブデザインを構築できます。
現在の主流はFlexboxですが、インラインブロックの特性を理解しておくことで、Flexboxでは解決しにくい細かな挙動の調整が可能になります。
まとめ
インラインブロック要素は、インライン要素の「横に並ぶ」という性質と、ブロックレベル要素の「サイズや余白を指定できる」という性質を兼ね備えた便利な表示形式です。
CSSでdisplay: inline-block;を適用するだけで、柔軟なレイアウトが可能になります。
一方で、HTMLの改行による隙間問題や、vertical-alignによる垂直方向のズレといった特有の癖も持ち合わせています。
これらの特性を正しく理解し、適切に対処することで、崩れのない美しいWebサイトを作成することができるでしょう。
FlexboxやCSS Gridといった新しい技術と並行して、インラインブロック要素を使いこなせるようになれば、CSSのスキルはより一層深まります。
それぞれの要素のメリットを活かし、状況に応じた最適な表示形式を選択するように心がけてください。
