Menu

Перенос строки в HTML: тег br, новые строки и wbr

Тег <br> начинает новую строку внутри блока текста. Разберем, когда <br> уместен, а когда лучше абзац, как сохранить переносы строк из текста, как разрешить перенос длинных слов через <wbr> и как запретить перенос строки.

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

Как сделать перенос строки

Поставьте <br> там, где должна начаться новая строка. Это пустой элемент, поэтому закрывающего тега у него нет:

Адрес переносится ровно на каждом <br>. Второй абзац остается в одной строке, хотя в исходном коде в нем есть перенос: HTML считает переносы строк, табуляции и серии пробелов одним пробелом. Именно поэтому и существует <br>.

<br>, <br/> и <br /> создают один и тот же элемент. Используйте тот вариант, который принят в вашем проекте (JSX и XHTML требуют косую черту).

br или p: перенос не равен отступу

<br> завершает строку внутри того же абзаца. Новый <p> начинает новый абзац, с отступами сверху и снизу за счет внешних отступов по умолчанию. Можно создавать промежутки несколькими <br> подряд, но это ненадежно и неверно по смыслу:

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

Где <br> уместен: адреса, стихи и тексты песен, строки в подписи, то есть там, где перенос принадлежит самому тексту. Для всего остального используйте абзацы, списки или заголовки.

Как сохранить переносы строк из текста

Если текст приходит извне (поле комментария, база данных, скрипт), в нем настоящие символы перевода строки, а не теги <br>. CSS-свойство white-space: pre-line заставляет браузер показывать эти символы как переносы строк:

Одна и та же строка показана в одну строку в сером блоке и в три строки в синем. Это еще и безопаснее, чем вставлять теги <br> в пользовательский текст через innerHTML, ведь так пользователи смогли бы внедрить HTML. Чтобы сохранить еще и пробелы с отступами, используйте white-space: pre, о котором рассказывает страница пробел в HTML.

Перенос длинных слов: wbr

Длинное слово или URL без пробелов может вылезти за пределы узкого блока. <wbr> отмечает место, где браузер может перенести строку при необходимости, а в остальных случаях ничего не делает:

Первый путь выходит за границы блока; второй переносится в местах <wbr>. Для текста, который вы не контролируете, CSS-свойство overflow-wrap: anywhere разрешает переносить длинные слова в любом месте.

Как запретить перенос строки

Иногда нужно обратное: удержать вместе «10 km» или номер телефона. Есть два способа:

&nbsp; это пробел, на котором браузер не переносит строку, поэтому «10» и «km» остаются вместе. white-space: nowrap держит на одной строке весь span. Замените &nbsp; обычным пробелом или уберите класс, и при такой ширине оба фрагмента разобьются на две строки.

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

  • Enter в исходном коде в надежде на новую строку. Переносы строк в HTML это пробелы. Используйте <br>, отдельные элементы или white-space: pre-line.
  • <br><br><br> для отступов. Используйте абзацы и margin.
  • Список из <br>. Используйте <ul> или <ol> с <li>, которые программы чтения с экрана объявляют как список.
  • </br>. Это некорректно. Пишите <br>.
  • <br> в пользовательском тексте через innerHTML. Задавайте textContent и используйте white-space: pre-line.

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

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

Вставьте <br> там, где должна начаться новая строка: Line one<br>Line two. Нажатие Enter в HTML-файле не поможет: браузер считает переносы строк в исходном коде обычными пробелами.

Как писать: <br>, <br/> или <br />?

Все три варианта работают в HTML и создают один и тот же элемент. <br> это обычная форма HTML; варианты с косой чертой поддерживаются для совместимости с XHTML и JSX. Сам по себе </br> некорректен, хотя браузеры читают его как еще один перенос строки.

Когда использовать <br>, а когда <p>?

Используйте <br>, когда перенос строки является частью самого содержимого, например в адресе или стихотворении. Для отдельных абзацев используйте отдельные элементы <p>, а для отступов CSS margin, а не несколько <br> подряд.

Как сохранить переносы строк из текста без тегов <br>?

Задайте элементу white-space: pre-line в CSS. Тогда браузер показывает каждый перенос строки в тексте как перенос, но по-прежнему схлопывает лишние пробелы. Это удобно для комментариев пользователей и текста, загруженного через JavaScript.

Как запретить перенос строки в HTML?

Оберните текст в элемент с white-space: nowrap или соедините два слова неразрывным пробелом &nbsp;, чтобы они всегда оставались на одной строке.

Coddy programming languages illustration

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

НАЧАТЬ