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.
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 <, > devient >, et & devient &. 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 <b>bold</b> in source.
The <b> 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:
// <div class="box"></div>
</code></pre>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 <b> 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

Attributs
La balise <xmp> prend également en charge les attributs globaux.
Pratique
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.