W3docs

HTML тег <pre>

Тег <pre> определяет предварительно отформатированный текст, который отображается точно так, как написан в HTML-файле.

HTML-тег <pre> определяет предварительно отформатированный текст — текст, который отображается точно так, как написан в исходном коде, с сохранением всех пробелов и переносов строк. Браузеры отображают содержимое элемента <pre> моноширинным шрифтом фиксированной ширины. Чаще всего он используется для отображения исходного кода (обычно вместе с тегом <code>) или любого текста, в котором автор управляет точным расположением строк, например поэзии или ASCII-арта.

Почему <pre> сохраняет пробельные символы

По умолчанию браузеры сворачивают пробельные символы: последовательность пробелов, табуляций и переносов строк отображается как один пробел, а переносы строк в HTML-коде не имеют визуального эффекта. Именно поэтому несколько пробелов подряд или нажатие Enter внутри обычного абзаца не меняют вид текста.

Элемент <pre> отказывается от этого поведения. Внутри него каждый пробел, табуляция и перенос строки значимы и отображаются буквально — нет необходимости использовать &nbsp; или <br> для управления отступами. Под капотом это тот же эффект, что и применение CSS-объявления white-space: pre, которое является стилем по умолчанию, назначаемым браузерами тегу <pre>.

Совет

Используйте <pre>, когда точное расположение символов имеет значение: листинги кода, вывод командной строки, табличный текст или ASCII-арт.

Синтаксис

Тег <pre> идёт парами. Содержимое размещается между открывающим (<pre>) и закрывающим (</pre>) тегами. Обратите внимание, что текст обычно начинается на строке после открывающего тега, и любые отступы, добавленные внутри источника, появятся в выводе.

Внутри тега <pre> обычно размещают строчные элементы. Хотя блочные элементы разрешены в HTML5, они могут вносить неожиданные пробелы или отступы, поэтому строчные элементы предпочтительнее.

Пример HTML-тега <pre>

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
  </head>
  <body>
    <pre>Spaces
               and line breaks
               within this element 
        are shown as typed.           
    </pre>
  </body>
</html>

Результат

pre tag example

Шаблон <pre><code> для блоков кода

Каноничный и доступный способ отображения блока исходного кода — вложить элемент <code> внутрь элемента <pre>:

  • <pre> обеспечивает блочную компоновку и сохраняет пробелы и переносы строк.
  • <code> добавляет семантику: он помечает содержимое как компьютерный код, а не обычный текст.

Вместе они сообщают поисковым системам и вспомогательным технологиям, что именно представляет собой содержимое. Экранные дикторы могут объявлять его как область кода, а библиотеки подсветки синтаксиса (Prism, highlight.js и др.) используют селектор pre > code для раскраски разметки. Использование только <pre> сохранило бы форматирование, но потеряло бы это значение, поэтому именно такая комбинация является рекомендуемым шаблоном.

Пример HTML-тега <pre> с элементом <code>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <pre><code>body {
  color: orange;
}</code></pre>
  </body>
</html>
Внимание

Пробельные символы внутри <pre> буквальны, поэтому размещайте закрывающий </pre> вплотную к коду (как показано выше). Начальные переносы строк и отступы между <pre> и <code> отображаются, именно поэтому глубоко отступленный исходный код может отображаться с нежелательными пустыми строками и ведущими пробелами.

Экранирование <, > и & внутри <pre>

<pre> сохраняет пробельные символы, но не отключает HTML-разбор. Браузер по-прежнему читает его содержимое как разметку. Поэтому если вы хотите отобразить буквальный HTML или что-либо, содержащее символы <, > или &, их необходимо экранировать с помощью HTML-сущностей — иначе браузер попытается интерпретировать их как теги:

СимволСущность
<&lt;
>&gt;
&&amp;

Например, чтобы отобразить текст <p>Hello & welcome</p>, необходимо написать:

<pre><code>&lt;p&gt;Hello &amp; welcome&lt;/p&gt;</code></pre>

Тогда страница отобразит угловые скобки вместо того, чтобы рендерить абзац. Полный список именованных сущностей см. в справочнике HTML Unicode.

Стилизация <pre> и свойство white-space

Браузеры по умолчанию стилизуют <pre> с помощью white-space: pre. Вы можете изменить перенос предварительно отформатированного текста с помощью CSS-свойства white-space:

ЗначениеПереносы строкПробелы / табуляцииПеренос по словам
preсохраняютсясохраняютсяникогда не переносится (по умолчанию для <pre>)
pre-wrapсохраняютсясохраняютсяпереносится при слишком длинной строке
pre-lineсохраняютсясворачиваютсяпереносится при слишком длинной строке

Поскольку pre никогда не переносит текст, длинная строка кода выйдет за пределы контейнера. Обычное решение — добавить горизонтальную полосу прокрутки с помощью overflow-x: auto, что сохраняет исходное форматирование и позволяет читателю прокручивать по горизонтали:

pre {
  background-color: #f4f4f4;
  padding: 10px;
  overflow-x: auto;     /* horizontal scroll for long lines */
}

Если вы предпочитаете, чтобы текст переносился на следующую строку вместо прокрутки, используйте вместо этого white-space: pre-wrap.

Атрибуты

Элемент <pre> не имеет обязательных атрибутов. Старые атрибуты width, cols и wrap устарели и удалены из HTML5 — вместо них используйте CSS:

Устаревший атрибутЧто он делалИспользуйте вместо него
widthзадавал ширину в символахCSS max-width
colsзадавал количество столбцовCSS width / max-width
wrapуправлял переносом строкCSS white-space: pre-wrap

Тег <pre> поддерживает глобальные атрибуты и атрибуты событий.

Связанные теги

Практика

Практика
Что верно в отношении HTML-тега 'pre'?
Что верно в отношении HTML-тега 'pre'?
Was this page helpful?