【実務・中級編】inlineとinline-blockのレイアウト特性比較 – HTML実践ガイド

なぜ「display: inline」と「inline-block」の挙動に、今さら深く向き合うべきなのか

フロントエンドの世界に入って数年経つと、`display: flex` や `grid` がレイアウトの主役になり、`inline` や `inline-block` のことを「古臭い手法」と切り捨てがちになります。しかし、現場のコードレビューで後輩のプルリクを見ていると、案外この「基本的な挙動」の理解不足が、「なぜか余白が消えない」「要素の高さが合わない」という不可解なバグを生んでいるケースが後を絶ちません。

今日は、あえて原点に立ち返り、この二つの違いを「ブラウザがどう解釈しているか」という視点から深掘りしてみましょう。ここを正確に理解すれば、CSSでレイアウトを調整する際の「勘」が、一段階鋭いものに変わるはずです。

—

1. 「流れる」か「箱を作る」か:根本的な哲学の違い

まず、ブラウザのレンダリングエンジンがどう考えているかを想像してください。

  • `display: inline`: テキストの一部です。行の中に「文字」と同じように流し込まれます。幅や高さという概念はなく、あくまで「中身の文字量に依存する」存在です。
  • `display: inline-block`: 「外見はインライン、中身はブロック」というハイブリッド型です。行の中に配置されるのは `inline` と同じですが、箱(ボックス)としての特性(width, height, margin, padding)を完璧に保持します。

決定的な違いのまとめ

| 特性 | inline | inline-block |
| :— | :— | :— |
| width / height | 指定不可(無視される) | 指定可能 |
| margin (上下) | 指定不可 | 指定可能 |
| padding (上下) | 見た目は伸びるが、周囲の行には影響しない | 周囲の要素を押し出す |
| 主な用途 | 文章中の強調、リンクなど | 横並びのボタン、アイコン付きテキスト |

—

2. 現場を悩ませる「謎の隙間」の正体

`inline-block` を使って横並びのメニューを作ったとき、なぜか意図しない「数ピクセルの隙間」ができてしまい、必死にネガティブマージンで調整した経験はありませんか?

実はこれ、ブラウザの「改行」の処理が原因です。HTMLコード内で `

` と `

` の間に改行やスペースがあると、ブラウザはそれを「ひとつの半角スペース」としてレンダリングします。`inline-block` は「テキストの一部」として扱われるため、このスペースがそのまま視覚的な隙間として描画されてしまうのです。

実践的コード:この隙間をどう処理するか

現場でよく使う、最もクリーンな解決策を提示します。

1
2

—

3. 実務で「inline-block」が輝く瞬間

「じゃあもう `inline-block` は使わないのか?」というと、そうではありません。現代のフロントエンド開発においても、特定のUIパターンでは `inline-block` こそが最強の選択肢になります。

おすすめの使い所:

  • 動的なボタンやタグ: 文字数によって幅が変わるが、アイコンやパディングを細かく制御したい要素。
  • 文章に埋め込まれたアイコン: テキストのベースラインに合わせて配置したい要素(`vertical-align` との組み合わせが極めて強力)。

現場でそのまま使える「inline-block」のベストプラクティス

/ アイコンをテキストの高さにぴったり合わせる /
.icon {
display: inline-block;
width: 1.2em;
height: 1.2em;
/ テキストのベースラインに対して垂直位置を調整する魔法のプロパティ /
vertical-align: middle;
margin-bottom: 0.1em;
}

—

最後に:シニアからのアドバイス

中級者へのアドバイスとして一つだけ付け加えるなら、「手段を目的化しないこと」です。

`inline-block` の挙動を完璧に理解することは大切ですが、現代の開発においては「Flexbox で解決できるなら Flexbox を使う」のが、保守性の観点からも正解です。それでもなお、`inline-block` の特性を知っておくべきなのは、既存のレガシーコードに触れた時や、あえて「テキストの流れ」を活かしたUIを作りたい時に、「なぜ今、この隙間ができているのか」「なぜこの要素は高さを持たないのか」を即座に言語化して修正できるからです。

技術は常に進化しますが、ブラウザの「根本的なレンダリングの仕組み」は変わりません。そこを理解しているエンジニアは、どんな技術スタックになっても生き残ります。

自信を持って、コードを書いていきましょう。また現場でお会いしましょう。

コメント

タイトルとURLをコピーしました