Outil de Formatage HTML
Qu'est-ce que le formatage HTML ?
Le formatage HTML réorganise un balisage désordonné ou compressé en code lisible avec indentation cohérente, retours à la ligne et hiérarchie de balises visible. Il facilite revue, débogage, apprentissage, transmission entre équipes et maintenance, surtout pour repérer balises non fermées, imbrication incorrecte, longues listes d’attributs ou HTML généré difficile à parcourir. En production, l’opération inverse peut être utile: la minification retire espaces, commentaires et sauts inutiles pour réduire le poids transféré. L’outil aide à passer entre lisibilité et compacité, mais ne corrige pas automatiquement la sémantique, l’accessibilité, les liens cassés, le contenu intégré risqué ni les erreurs de template.
Comment utiliser
Comment utiliser
- Collez ou saisissez le code HTML dans la zone de gauche
- Choisissez la taille d'indentation et la longueur de ligne
- Cliquez sur 'Formater' pour embellir le code, ou sur 'Minifier' pour réduire sa taille
- Le code formaté s'affiche à droite (avec coloration syntaxique)
- Cliquez sur 'Copier' pour copier dans le presse-papiers
Description des options
Raccourcis clavier
- Ctrl + EnterFormater
- Ctrl + Shift + CCopier le résultat
Conseils de formatage
- Le formatage peut révéler une imbrication cassée ou des scripts inline suspects, mais il ne nettoie pas le HTML et ne rend pas sûr un balisage dangereux.
- Ne minifiez que les copies destinées à la diffusion. Conservez le balisage source lisible pour les revues, les comparaisons et les vérifications d'accessibilité.
Cas d’utilisation
Principe technique
Un formateur HTML suit l'algorithme de construction d'arbre du WHATWG HTML Standard. Les octets sont décodés (généralement en UTF-8 selon le meta charset ou le BOM), le tokenizer parcourt les états data, RCDATA, RAWTEXT, script-data et plusieurs états d'attributs définis dans la section 13.2.5, et la phase de construction d'arbre construit un DOM en utilisant la machine à états par mode d'insertion (initial, before html, in head, in body, in table, in select, etc.). Le parseur est tolérant par conception : un <p> non fermé est automatiquement fermé quand un bloc suit, un </tr> isolé est ignoré, et un <table> mal placé est déplacé par foster parenting. Les parseurs de qualité navigateur exposent cela via new DOMParser().parseFromString(src, 'text/html') ; les outils côté Node utilisent parse5 (l'implémentation de référence WHATWG), htmlparser2 ou cheerio. La réimpression parcourt l'arbre résultant et sérialise selon la catégorie de l'élément. Les éléments vides — area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr — ne reçoivent jamais de balise fermante en HTML5 (l'auto-fermeture XHTML /> est autorisée mais optionnelle). Les conteneurs de niveau bloc (div, section, article, header, footer, nav, main, ul, ol, li, table) obtiennent leur propre ligne à profondeur*indent espaces ; le contenu de type phrasé/inline (span, a, strong, em, code) est conservé en ligne car CSS white-space: normal réduit les suites d'espaces en un seul caractère. Deux types d'éléments doivent être préservés tels quels : <pre> et <textarea> portent la sémantique white-space: pre, et leur saut de ligne initial est absorbé par le parseur ; les corps de <script> et <style> sont de type RAWTEXT, donc ré-indenter leur contenu changerait le comportement à l'exécution — ils sont généralement délégués à un sous-formateur JS ou CSS puis ré-intégrés. La sérialisation des attributs normalise les guillemets (simples vs doubles) et ré-encode les délimiteurs intégrés via les références de caractères nommées &, <, >, " et la référence numérique '. L'ordre des attributs n'est pas significatif dans le DOM, donc les formateurs appliquent généralement un ordre stable (id, class, puis alphabétique). Le retour à la ligne se déclenche au-delà d'un printWidth configuré : les attributs sont séparés un par ligne avec le > fermant soit sur sa propre ligne (prettier-plugin-html bracketSameLine: false), soit accolé. La minification inverse le processus — les espaces entre les balises de bloc sont supprimés, les commentaires sont retirés sauf les conditionnels IE <!--[if, et les guillemets sont supprimés des attributs dont la valeur correspond à [A-Za-z0-9._-]+. Les deux opérations sont en O(n) sur la longueur de l'entrée.
- Parseur : construction d'arbre WHATWG HTML (section 13) via DOMParser('text/html') dans le navigateur, parse5/htmlparser2/cheerio sur Node ; la machine à états par mode d'insertion gère les balises manquantes/mal placées et le foster parenting.
- Éléments vides (pas de balise fermante) : area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr — 14 éléments selon le HTML Living Standard. L'auto-fermeture XHTML /> est tolérée mais redondante.
- Éléments préservant les espaces : <pre> et <textarea> portent CSS white-space: pre et absorbent un saut de ligne initial ; leurs octets intérieurs ne sont jamais ré-indentés ou la sortie visible change.
- Contextes RAWTEXT : les corps de <script> et <style> ne sont pas du HTML — ils sont délégués à des sous-formateurs JS/CSS (ou laissés tels quels). Ré-indenter du texte brut dans une expression régulière ou un littéral de chaîne casserait la sémantique d'exécution.
- Normalisation des attributs : style de guillemets choisi (simple/double), délimiteurs intégrés ré-encodés avec les cinq références nommées (&, <, >, ", '), ordre stable appliqué (id, class, puis alphabétique) puisque l'ordre DOM n'est pas significatif.
- Retour à la ligne au-delà de printWidth (généralement 80/100/120) : attributs séparés un par ligne avec le > fermant soit sur sa propre ligne, soit accolé au dernier attribut, reproduisant l'option bracketSameLine de prettier-plugin-html.
- Minification : réduit les espaces inter-balises, supprime les commentaires (en conservant les conditionnels <!--[if IE]>), retire les balises fermantes optionnelles (</li>, </p> quand suivis d'un frère), et supprime les guillemets des attributs correspondant à [A-Za-z0-9._-]+ ; le round-trip est en O(n).
Exemples
HTML minifié → formaté (indentation à 2 espaces)
Entrée :
<div class="card"><h2>Title</h2><p>Body text</p></div>
Formaté :
<div class="card">
<h2>Title</h2>
<p>Body text</p>
</div>Formaté → minifié (déploiement en production)
Source (412 octets) :
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
Minifié (96 octets, -77%) :
<nav><ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li></ul></nav>Longue liste d'attributs répartie sur plusieurs lignes
Entrée :
<input type="email" id="user-email" name="email" placeholder="you@example.com" required autocomplete="email">
Formaté (retour à la ligne > 80 caractères) :
<input
type="email"
id="user-email"
name="email"
placeholder="you@example.com"
required
autocomplete="email"
>Balises auto-fermantes et contenu en ligne préservés
Entrée :
<p>Click <a href="/docs">here</a> for help.<br><img src="icon.png" alt=""></p>
Formaté (les frères et sœurs en ligne restent sur une seule ligne) :
<p>
Click <a href="/docs">here</a> for help.
<br>
<img src="icon.png" alt="">
</p>FAQ
Que formate-t-il ?
Le balisage HTML : indentation, placement des attributs, gestion des lignes vides et (en option) retour à la ligne à une largeur de colonne choisie. Ne change pas le rendu — votre page a l'air identique, c'est juste la source qui est plus lisible.
Préservera-t-il mes blocs <pre>, <textarea> et <script> ?
Oui. Les espaces à l'intérieur des blocs pre, textarea, code et script sont significatifs (ils apparaissent au rendu) et le formateur n'y touche pas. Les autres éléments voient leurs espaces normalisés.
Pourquoi mes balises auto-fermantes sont-elles réécrites ?
<br/>, <img/>, <hr/> en HTML5 sont équivalents à <br>, <img>, <hr> (HTML5 n'exige pas le slash). Le formateur peut choisir un style de manière cohérente. Pour les modèles XHTML/JSX/Vue, configurez le formateur pour conserver le slash final.
Valide-t-il le HTML ?
Non. Il formate ce que vous collez. Pour valider, utilisez le validateur W3C ou les outils développeur d'un navigateur. Les problèmes courants comme les balises non fermées ou les guillemets dépareillés passent à travers le formatage.
Le HTML est-il téléversé ?
Non. Le formatage s'exécute dans votre navigateur. Le HTML collé ne traverse jamais le réseau.
Peut-il minifier le HTML ?
Oui s'il y a un mode minify. La minification HTML supprime les espaces entre les balises, regroupe les suites d'espaces dans le texte et retire les balises de fermeture optionnelles. Le résultat est plus difficile à lire mais plus petit — utile pour les builds de production.
Qu'en est-il du CSS et du JS embarqués ?
Les contenus de <style> et <script> sont généralement formatés avec leurs propres formateurs (CSS, JS) quand la page le prend en charge. Sinon leur contenu interne est laissé tel quel pour éviter de casser la syntaxe.