Menu

Пробел в HTML:  , несколько пробелов и white-space

Браузер схлопывает любую серию пробелов в HTML в один. Разберем, как добавить лишние пробелы через &nbsp;, что делает неразрывный пробел, как сохранить пробелы и табуляцию через <pre> и white-space и когда лучше подходят отступы CSS.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как добавить пробелы в HTML

Напишите пять пробелов между двумя словами в HTML, и браузер покажет один. Любая серия пробелов, табуляций и переносов строк схлопывается в один пробел. Чтобы добавить лишние пробелы, используйте сущность неразрывного пробела &nbsp;, по одной на каждый пробел:

&nbsp; подходит для нескольких пробелов в строке текста. Для больших промежутков или расстояния между элементами используйте CSS, о нем ниже.

Что делает  

&nbsp; это неразрывный пробел (символ U+00A0). У него два эффекта:

  1. Он никогда не схлопывается, поэтому три таких символа дают три пробела.
  2. Строка на нем никогда не переносится, поэтому слова по обе стороны остаются вместе.

Второе и есть его настоящая работа. Числа и единицы измерения, инициалы и короткие фразы, которые плохо смотрятся разорванными на две строки, соединяют через &nbsp;:

В сером блоке «10» и «km» оказываются на разных строках. В зеленом их разделить нельзя. Чтобы удержать вместе фрагмент подлиннее, проще задать span white-space: nowrap, чем выстраивать цепочку сущностей; подробнее на странице перенос строки.

Сущности пробелов разной ширины

В HTML есть именованные символы для более широких и узких пробелов. Они тоже не схлопываются, поэтому удобны для тонкой настройки промежутков в тексте:

СущностьНазваниеШирина
&nbsp;Неразрывный пробелКак обычный пробел
&ensp;Пробел enПоловина em
&emsp;Пробел emОдин em (размер шрифта)
&thinsp;Тонкий пробелДоля em, зависит от шрифта
&#8239;Узкий неразрывный пробелТонкий и без переноса строки

Синяя подсветка показывает ширину каждого пробела. Переносы строк запрещают только &nbsp; и &#8239;.

Как сохранить все пробелы: pre и white-space

Когда пробелы являются частью содержимого (код, ASCII-графика, выровненные столбцы, стихи), сохраните все пробельные символы, а не добавляйте сущности. Элемент <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 справляется с этим лучше сущностей: промежуток остается одинаковым и меняется в одном месте:

margin и padding задают расстояния между элементами, gap задает промежутки между элементами flex- или grid-контейнера, letter-spacing и word-spacing меняют расстояния в самом тексте. Чтобы сделать отступ первой строки абзаца, используйте text-indent, о котором рассказывает страница выравнивание текста по центру.

Промежуток между строчными элементами

Обратная сторона схлопывания: пробельные символы между двумя строчными или inline-block элементами все равно считаются одним пробелом. Перенос строки между двумя кнопками в исходном коде ставит между ними небольшой промежуток:

У первой пары есть промежуток из-за переноса строки в исходном коде. Во flex-контейнере пробелы между элементами игнорируются, поэтому вторая пара соприкасается. Используйте flex и gap, когда нужно точно управлять расстоянием.

Частые ошибки

  • Цепочки &nbsp; для раскладки. Они ломаются, как только меняется шрифт или размер экрана. Используйте margin, padding или gap.
  • Лишние пробелы в надежде, что они появятся. Они схлопываются. Используйте &nbsp; или white-space: pre-wrap.
  • &nbsp без точки с запятой. Браузеры обычно его принимают, но это некорректно и в некоторых местах не работает. Всегда заканчивайте на ;.
  • &nbsp; повсюду, чтобы запретить перенос. Длинный неразрывный фрагмент вылезает за экран на телефонах. Соединяйте только то, что обязано оставаться вместе.
  • Отступ абзаца пробелами. Используйте text-indent в CSS.

Часто задаваемые вопросы

Как сделать пробел в HTML?

Один пробел работает как написан, но лишние пробелы схлопываются в один. Чтобы добавить больше, используйте сущность неразрывного пробела &nbsp;, по одной на пробел: a&nbsp;&nbsp;&nbsp;b. Для промежутков в раскладке используйте CSS margin, padding или gap.

Что означает &nbsp; в HTML?

&nbsp; это неразрывный пробел. Он выглядит как обычный пробел, но браузер никогда не переносит на нем строку и никогда его не схлопывает, поэтому он удерживает вместе слова вроде 10&nbsp;km и позволяет добавлять лишние пробелы.

Почему HTML игнорирует мои пробелы?

HTML схлопывает пробельные символы: любая серия пробелов, табуляций и переносов строк показывается как один пробел, а пробелы в начале и конце строки удаляются. Чтобы их сохранить, используйте &nbsp;, <pre> или CSS-свойство white-space.

Как сделать табуляцию в HTML?

Вне предварительно отформатированного текста видимой табуляции в HTML нет. Внутри <pre> или элемента с white-space: pre символ табуляции сохраняется, а CSS-свойство tab-size задает его ширину. Для отступа абзаца используйте в CSS text-indent или padding-inline-start.

Чем &nbsp; отличается от &emsp;?

&nbsp; шириной с обычный пробел. &ensp; шириной в половину em, а &emsp; в один em (ширина, равная размеру шрифта). &ensp; и &emsp; не схлопываются, но, в отличие от &nbsp;, строка на них все же может переноситься.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ