W3docs

HTML тег <xmp>

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

HTML тег <xmp> является устаревшим и нерекомендуемым. Он был удалён из стандарта HTML и не должен применяться на новых страницах. На этой странице объясняется, что он раньше делал, почему был исключён и как сегодня правильно отображать буквальный HTML или предварительно отформатированный текст.

Исторически <xmp> («example» — пример) отображал текст между открывающим и закрывающим тегами точно так, как он был написан — моноширинным шрифтом, с сохранением пробелов и переносов строк — и, что принципиально важно, без интерпретации любого HTML внутри него. Это означало, что можно было вставить разметку вроде <b>bold</b>, и браузер показывал угловые скобки вместо того, чтобы отрисовывать жирный текст.

Опасно

Не используйте <xmp>. Он не соответствует стандарту HTML5, и его поведение ненадёжно в разных браузерах. Используйте <pre> (при необходимости с <code>) и экранируйте символы <, > и & с помощью HTML-сущностей. Смотрите раздел о современной замене ниже.

Почему был удалён <xmp>

Элемент <xmp> был объявлен устаревшим, поскольку его поведение «показывать необработанный HTML без экранирования» принципиально противоречит тому, как браузеры разбирают документы:

  • Разбор был непоследовательным. Поскольку парсер должен был переключаться в специальный режим «необработанного текста» для поиска закрывающего </xmp>, браузеры расходились во мнениях относительно граничных случаев — вложенные теги, комментарии и особенно буквальная строка </xmp> внутри содержимого вели себя по-разному в разных движках.
  • Он поощрял неэкранированное содержимое. Авторы полагались на <xmp> для вставки HTML прямо в страницу. Один случайный </xmp> в этом содержимом мог преждевременно завершить блок и привести к отрисовке оставшейся разметки, что является одновременно ошибкой отображения и потенциальной проблемой безопасности.
  • Стандартная, предсказуемая альтернатива уже существовала. <pre> сохраняет пробелы и использует моноширинный шрифт, а экранирование сущностями надёжно отображает буквальные < и >. Поскольку эта комбинация чётко определена и работает одинаково везде, <xmp> больше не был нужен.

Тесно связанный тег <plaintext> был удалён по тем же причинам. Полный список смотрите в разделе Устаревшие HTML-теги.

Современная замена

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

<!DOCTYPE html>
<html>
  <head>
    <title>Showing literal HTML with pre</title>
  </head>
  <body>
    <pre>
This is &lt;b&gt;bold&lt;/b&gt; in source.
The &lt;b&gt; tag is shown as text, not rendered.
    </pre>
  </body>
</html>

На отрисованной странице блок <pre> выше отображает ровно следующее:

This is <b>bold</b> in source.
The <b> tag is shown as text, not rendered.

Когда предварительно отформатированный текст представляет собой блок исходного кода, оберните его в <code> для большей семантической ясности:

<pre><code>function greet(name) {
  return "Hello, " + name;
}

// Literal HTML still needs escaping here too:
// &lt;div class="box"&gt;&lt;/div&gt;
</code></pre>
Информация

Правило экранирования — это ключевое отличие от <xmp>. Внутри <pre> (и везде в обычном HTML) буквальный <b> был бы распознан как тег, поэтому для отображения его как текста необходимо писать &lt;b&gt;.

Синтаксис

Тег <xmp> использовался парами. Содержимое записывалось между открывающим (<xmp>) и закрывающим (</xmp>) тегами. (Показано только для справки — не используйте его.)

Устаревший пример HTML тега <xmp>

Пример ниже показывает, как в своё время использовался <xmp>. Он приведён исключительно для исторической справки; в современном HTML замените его на подход с <pre>, показанный выше.

HTML тег <xmp>

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
  </head>
  <body>
    <xmp> This is a preformatted text.
      All characters in this area have the same width,
      and the spaces and line breaks within this element are shown as typed.
    </xmp>
  </body>
</html>

Результат

пример тега xmp

Атрибуты

Тег <xmp> также поддерживает Глобальные атрибуты.

Практика

Практика
What is true about the HTML <xmp> tag?
What is true about the HTML <xmp> tag?

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

  • <pre> — стандартный элемент для предварительно отформатированного моноширинного текста.
  • <code> — выделяет фрагмент кода программы.
  • <plaintext> — ещё один удалённый тег с аналогичным поведением для необработанного текста.
  • Устаревшие HTML-теги — полный список устаревших элементов, которых следует избегать.
Was this page helpful?