<br>

Брутальный способ перенести текст или элемент на новую строку.

Время чтения: меньше 5 мин

По мере развития стандарта HTML в него добавлялись новые теги и убирались неактуальные. В HTML5 большой упор был сделан на семантический смысл тегов, а всё, что касалось визуальной составляющей, было отдано на откуп CSS. То есть теперь использование тех или иных тегов определяется их функциональным назначением, а не тем, как тег влияет на внешний вид элемента.

С переходом на стандарт HTML5 из перечня тегов были исключены практически все оформительские (например, <small> или <font>). При этом разработчики стандарта оставили довольно спорный тег <br>. Спорный потому, что часто у разработчиков нет полного понимания, когда его следует применять.

Правильное применение тега

Скопировано

Стандарт однозначно описывает назначение этого тега и ситуации, в которых уместно его применение: этот тег указывает на место разрыва строки и принудительного переноса текста на новую строку. И только для этих целей он должен применяться. Яркий пример — деление стихотворения по строкам:

        
          
          <p>  Мой дядя самых честных правил,<br>  Когда не в шутку занемог,<br>  Он уважать себя заставил<br>  И лучше выдумать не мог.</p>
          <p>
  Мой дядя самых честных правил,<br>
  Когда не в шутку занемог,<br>
  Он уважать себя заставил<br>
  И лучше выдумать не мог.
</p>

        
        
          
        
      

Ещё одним примером может служить вёрстка почтового адреса, когда принципиально разнести части адреса по разным строкам:

        
          
          <address>  432000<br>  г. Ульяновск<br>  ул. Ленина, д. 34</address>
          <address>
  432000<br>
  г. Ульяновск<br>
  ул. Ленина, д. 34
</address>

        
        
          
        
      

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

Случаи неправильного применения тега

Скопировано

Неправильное объединение элементов в группу

Скопировано

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

Неправильно:

        
          
          <p>  <label>Имя: <input name="name"></label><br>  <label>Адрес: <input name="address"></label></p>
          <p>
  <label>Имя: <input name="name"></label><br>
  <label>Адрес: <input name="address"></label>
</p>

        
        
          
        
      

Правильно:

        
          
          <p><label>Имя: <input name="name"></label></p><p><label>Адрес: <input name="address"></label></p>
          <p><label>Имя: <input name="name"></label></p>
<p><label>Адрес: <input name="address"></label></p>

        
        
          
        
      

Вертикальные отступы

Скопировано

Ещё один пример неправильного употребления тега — использование его в декоративных целях: для задания вертикальных отступов между элементами. Вертикальные отступы — часть визуального оформления страницы, и должны задаваться исключительно в CSS.

Неправильно:

        
          
          <article>  <h2>Контейнеровоз сел на мель в Суэцком канале</h2>  <p>...</p></article><br><br><article>  <h2>Во всём мире наблюдается дефицит чипов</h2>  <p>...</p></article>
          <article>
  <h2>Контейнеровоз сел на мель в Суэцком канале</h2>
  <p>...</p>
</article>
<br>
<br>
<article>
  <h2>Во всём мире наблюдается дефицит чипов</h2>
  <p>...</p>
</article>

        
        
          
        
      

Правильно с использованием CSS:

        
          
          <article>  <h2>Контейнеровоз сел на мель в Суэцком канале</h2>  <p>...</p></article><article>  <h2>Во всём мире наблюдается дефицит чипов</h2>  <p>...</p></article>
          <article>
  <h2>Контейнеровоз сел на мель в Суэцком канале</h2>
  <p>...</p>
</article>
<article>
  <h2>Во всём мире наблюдается дефицит чипов</h2>
  <p>...</p>
</article>

        
        
          
        
      
        
          
          article {  margin-bottom: 2em;}
          article {
  margin-bottom: 2em;
}

        
        
          
        
      

Важно упомянуть, что при использовании <br> для вертикальных отступов между блочными элементами величина отступа напрямую зависит от размера шрифта родителя.

Открыть демо в новой вкладке

Переносы в заголовках

Скопировано

Зачастую на вёрстку приходят макеты, в которых дизайнер размещает текст в заголовках таким образом, чтобы он красиво смотрелся. Переносит слова и балансирует длину строк так, чтобы макет смотрелся опрятно.

Искусственный разрыв заголовка дизайнером

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

Например, при адаптивной вёрстке слова в заголовке перестроятся, а разрыв строки никуда не денется. В результате заголовок будет вести себя неестественно: слова перенесутся не там, где должны.

Открыть демо в новой вкладке

Попробуйте поизменять ширину окна в примере выше. Во втором блоке мы видим, что заголовок неестественно разрывает строки на малой ширине. Всё потому, что через CSS мы не можем управлять поведением <br>, и этот тег продолжает разрывать строку, несмотря ни на что.

Таким образом, использовать <br> можно, но с осторожностью, с оглядкой на спецификацию и здравый смысл.

Доступность

Скопировано

<br> влияет на то, как скринридеры обрабатывают текст. К примеру, они перестают зачитывать текст в режиме чтения после встречи с <br>, объявляют его или не делают нужной паузы после предложения, когда она нужна.

Так что лучше используйте <p>, если не уверены в том, точно ли нужен <br>. А с декоративными отступами всегда поможет разобраться CSS.