Menu

HTML の空白・スペース:  、連続した空白、white-space

ブラウザは HTML の連続した空白を 1 つにまとめます。&nbsp; で空白を増やす方法、改行しない空白の働き、<pre> と white-space で空白やタブを残す方法、CSS で余白を作るほうがよい場面を解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

HTML で空白を入れる

HTML で 2 つの単語の間に空白を 5 つ入力しても、ブラウザには 1 つしか表示されません。連続した空白、タブ、改行はすべて 1 つの空白にまとめられます。空白を増やすには、改行しない空白の文字参照 &nbsp; を空白 1 つにつき 1 回使います。

&nbsp; はテキストの行の中で数個の空白を入れるのに向いています。もっと大きな間隔や要素の間の余白には、後で紹介する CSS を使いましょう。

  の働き

&nbsp; は改行しない空白 (文字 U+00A0) です。効果は 2 つあります。

  1. まとめられないので、3 つ書けば 3 つの空白になります。
  2. そこで改行されないので、両側の単語が離れません。

本来の役割は 2 つ目です。数値と単位、イニシャル、2 行に分かれると不自然な短い語句を &nbsp; でつなぎます。

グレーの箱では「10」と「km」が別の行に分かれます。緑の箱では分かれません。もっと長い範囲をまとめたいなら、文字参照を並べるより span に white-space: nowrap を指定するほうが簡単です。改行 のページを参照してください。

幅の異なる空白の文字参照

HTML には、幅の広い空白や狭い空白を表す名前付きの文字があります。これらもまとめられないので、テキストの細かい間隔の調整に便利です。

文字参照名前幅
&nbsp;ノーブレークスペース普通の空白と同じ
&ensp;En スペース0.5em
&emsp;Em スペース1em (フォントサイズ)
&thinsp;シンスペースem の数分の 1 (フォントによる)
&#8239;狭いノーブレークスペース細く、改行もしない

青いハイライトが各空白の幅を示しています。改行も止めるのは &nbsp; と &#8239; だけです。

空白をすべて残す: pre と white-space

コード、アスキーアート、揃えた列、詩など、空白が内容の一部である場合は、文字参照を足すのではなく空白をすべて残します。<pre> 要素は初期状態でそうなり、CSS の white-space プロパティを使えばどの要素でも同じことができます。

white-space の値空白改行長い行の折り返し
normal (初期値)まとめる空白になるする
nowrapまとめる空白になるしない
pre残す残すしない
pre-wrap残す残すする
pre-lineまとめる残すする

ユーザーのテキストには普通 pre-wrap が適しています。空白を残しつつ、狭い画面でも折り返します。pre は行をそのまま保ち、代わりにスクロールするかはみ出します。

タブも pre の中では残ります。幅は初期値で空白 8 つ分で、tab-size プロパティで変えられます (tab-size: 4)。

CSS で余白を作る

「ここに空白がほしい」と思う場面の多くは実はレイアウトの問題で、文字参照より CSS のほうがうまくできます。間隔が一定に保たれ、1 か所で変更できるからです。

margin と padding は要素の間隔を、gap は flex や grid コンテナの項目の間隔を、letter-spacing と word-spacing はテキスト自体の間隔を空けます。段落の最初の行を字下げするには text-indent を使います。テキストの中央揃え のページで解説しています。

インライン要素の間の隙間

空白がまとめられることの裏返しで、2 つのインライン要素やインラインブロック要素の間の空白は、1 つの空白として残ります。ソースで 2 つのボタンの間に改行があると、その間に小さな隙間ができます。

1 組目には、ソースの改行による隙間があります。flex コンテナの中では項目の間の空白は無視されるので、2 組目はくっついています。間隔を正確に決めたいときは flex と gap を使いましょう。

よくある間違い

  • レイアウトのために &nbsp; を並べる。 フォントや画面サイズが変わるとすぐに崩れます。margin、padding、gap を使いましょう。
  • 余分な空白を入力して表示されると思う。 まとめられます。&nbsp; か white-space: pre-wrap を使いましょう。
  • セミコロンなしで &nbsp と書く。 ブラウザは普通受け付けますが、無効で、場所によっては失敗します。必ず ; で終えましょう。
  • 折り返しを防ぐためにあちこちで &nbsp; を使う。 改行しないテキストが長く続くと、スマートフォンではみ出します。離れてはいけない部分だけをつなぎましょう。
  • 空白で段落を字下げする。 CSS の text-indent を使いましょう。

よくある質問

HTML で空白を入れるには?

1 つの空白は入力したとおりに表示されますが、余分な空白は 1 つにまとめられます。増やしたいときは改行しない空白の文字参照 &nbsp; を空白 1 つにつき 1 回使います: a&nbsp;&nbsp;&nbsp;b。レイアウトの間隔には CSS の margin、padding、gap を使いましょう。

HTML の &nbsp; とは何ですか?

&nbsp; は改行しない空白 (ノーブレークスペース) です。見た目は普通の空白と同じですが、ブラウザはそこで改行せず、まとめることもありません。10&nbsp;km のような語句を離さずに保ち、空白を増やすのにも使えます。

HTML で空白が無視されるのはなぜですか?

HTML は空白をまとめます。連続した空白、タブ、改行は 1 つの空白として表示され、行の先頭と末尾の空白は取り除かれます。残したいときは &nbsp;、<pre>、CSS の white-space プロパティを使います。

HTML でタブを入れるには?

整形済みテキスト以外では、HTML でタブは表示されません。<pre> や white-space: pre を指定した要素の中ではタブ文字が残り、CSS の tab-size プロパティで幅を決められます。段落の字下げには CSS の text-indent や padding-inline-start を使います。

&nbsp; と &emsp; の違いは何ですか?

&nbsp; は普通の空白と同じ幅です。&ensp; は 0.5em、&emsp; は 1em (フォントサイズと同じ幅) です。&ensp; と &emsp; もまとめられませんが、&nbsp; と違ってそこで改行されることがあります。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める