W3docs

La balise HTML <xmp>

La balise <xmp> affiche le texte entre les balises de début et de fin sans interpréter le HTML et en utilisant une police à espacement fixe.

La balise HTML <xmp> est obsolète et dépréciée. Elle a été supprimée de la norme HTML et ne doit pas être utilisée dans de nouvelles pages. Cette page explique ce qu'elle faisait autrefois, pourquoi elle a été abandonnée, et comment afficher correctement du HTML littéral ou du texte préformaté aujourd'hui.

Historiquement, <xmp> (« exemple ») affichait le texte entre ses balises de début et de fin exactement tel qu'écrit — dans une police à espacement fixe, avec les espaces et les sauts de ligne préservés — et, de façon cruciale, sans interpréter le HTML à l'intérieur. Cela signifiait que vous pouviez coller du balisage brut comme <b>bold</b> et le navigateur afficherait les chevrons au lieu de rendre le texte en gras.

Danger

N'utilisez pas <xmp>. Elle est non conforme en HTML5 et son comportement est peu fiable selon les navigateurs. Utilisez <pre> (optionnellement avec <code>) et échappez les caractères <, > et & avec des entités HTML à la place. Voir le remplacement moderne ci-dessous.

Pourquoi <xmp> a été supprimée

L'élément <xmp> a été déprécié parce que son comportement « afficher du HTML brut sans échappement » est fondamentalement incompatible avec la façon dont les navigateurs analysent les documents :

  • L'analyse était incohérente. Parce que l'analyseur devait passer dans un mode spécial « texte brut » pour trouver la balise fermante </xmp>, les navigateurs n'étaient pas d'accord sur les cas limites — les balises imbriquées, les commentaires, et surtout la chaîne littérale </xmp> apparaissant dans le contenu se comportaient différemment selon les moteurs.
  • Cela encourageait le contenu non échappé. Les auteurs utilisaient <xmp> pour insérer du HTML directement dans une page. Un simple </xmp> parasite dans ce contenu terminait le bloc prématurément et laissait le reste du balisage s'afficher, ce qui constitue à la fois un bug de rendu et un problème de sécurité potentiel.
  • Une alternative standard et prévisible existait déjà. <pre> préserve les espaces et utilise une police à espacement fixe, et l'échappement des entités affiche de manière fiable les caractères < et > littéraux. Parce que cette combinaison est bien définie et fonctionne de la même façon partout, <xmp> n'était plus nécessaire.

La balise étroitement liée <plaintext> a été supprimée pour les mêmes raisons. Pour la liste complète, voir Balises HTML dépréciées.

Le remplacement moderne

Pour afficher du HTML littéral, utilisez <pre> et remplacez chaque caractère spécial par son entité HTML : < devient &lt;, > devient &gt;, et & devient &amp;. Le navigateur décode les entités en caractères visibles mais ne les traite jamais comme du balisage.

<!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>

Dans la page rendue, le bloc <pre> ci-dessus affiche exactement :

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

Lorsque le texte préformaté est spécifiquement un bloc de code source, enveloppez-le dans <code> pour une sémantique plus claire :

<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>
Info

La règle d'échappement est la différence clé avec <xmp>. À l'intérieur de <pre> (et partout ailleurs dans le HTML normal), un <b> littéral serait analysé comme une balise, vous devez donc écrire &lt;b&gt; pour l'afficher en tant que texte.

Syntaxe

La balise <xmp> s'utilisait par paires. Le contenu était écrit entre les balises ouvrante (<xmp>) et fermante (</xmp>). (Présenté uniquement à titre de référence — ne l'utilisez pas.)

Exemple historique de la balise HTML <xmp>

L'exemple ci-dessous montre comment <xmp> était utilisée autrefois. Il est conservé à titre de référence historique ; en HTML moderne, remplacez-le par l'approche <pre> présentée ci-dessus.

Balise 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>

Résultat

exemple de la balise xmp

Attributs

La balise <xmp> prend également en charge les attributs globaux.

Pratique

Pratique
Qu'est-ce qui est vrai à propos de la balise HTML <xmp> ?
Qu'est-ce qui est vrai à propos de la balise HTML <xmp> ?

Balises associées

  • <pre> — l'élément standard pour le texte préformaté à espacement fixe.
  • <code> — marque un fragment de code informatique.
  • <plaintext> — une autre balise supprimée avec un comportement similaire de texte brut.
  • Balises HTML dépréciées — la liste complète des éléments obsolètes à éviter.
Was this page helpful?