Outil de Formatage CSS
Qu'est-ce que le formatage CSS ?
Le formateur CSS organise les feuilles de style dans une structure cohérente et lisible. Sélecteurs, déclarations, media queries, keyframes, variables et sorties de préprocesseur deviennent plus faciles à examiner que dans du code minifié ou mal indenté. Cela aide au débogage, à la revue, à la maintenance d’un design system, à l’enseignement et à la compréhension de styles copiés. Le formatage ne change pas automatiquement cascade, spécificité, héritage ni compatibilité navigateur. Une règle discrète peut avoir un effet important si elle se charge tard ou utilise un sélecteur fort. En production, il faut vérifier états responsives, régression visuelle, lint, build et contexte du composant.
Comment utiliser
Comment utiliser
- Collez ou saisissez le code CSS dans la zone de saisie de gauche.
- Sélectionnez la taille d'indentation et le style de formatage.
- Cliquez sur « Formater » pour embellir le code, ou sur « Minifier » pour en réduire la taille.
- Consultez le résultat à droite, avec coloration syntaxique.
- Cliquez sur « Copier » pour copier dans le presse-papiers.
Options de style de formatage
Raccourcis clavier
- Ctrl + EnterFormater
- Ctrl + Shift + CCopier le résultat
Conseils de formatage
- Le formatage modifie les espaces et la mise en page, pas le comportement des sélecteurs ; testez toujours la feuille de style après l'édition de cascades ou de media queries complexes.
- Ne minifiez que lorsque le résultat sera utilisé pour la mise en production ou l'intégration. Conservez une copie lisible pour la relecture et la maintenance.
Cas d’utilisation
Principe technique
Le formatage CSS est un problème de tokenisation + pretty-printing, et non d'analyse complète. Un analyseur CSS conforme à la spécification (CSS Syntax Module Level 3, recommandation W3C) est plus lourd qu'un formateur n'en a besoin : il construit un AST avec des règles de style, des at-rules, des déclarations et des valeurs de composantes, et résout les cas limites d'analyse (chaînes non terminées, accolades non appariées, propriétés avec préfixe vendeur). Cette page utilise un tokenizer plus léger qui parcourt le flux de caractères, reconnaît les mêmes classes de tokens (ident, at-keyword, hash, string, bad-string, number, dimension, percentage, url, function, ponctuation, commentaire), et les émet sous forme de liste plate ; le pretty-printer réassemble ensuite les tokens avec l'indentation choisie, le style d'accolades et les règles d'espacement. Les deux unités structurelles en CSS sont les blocs de règles (sélecteur { déclarations }) et les blocs d'at-rules (@media, @supports, @container, @keyframes encapsulant un ou plusieurs blocs de règles). Le formateur parcourt un flux de tokens et suit la profondeur d'accolades : un `{` incrémente la profondeur (suivi d'un saut de ligne + indentation), un `}` décrémente la profondeur (et l'indentation se réduit pour correspondre au `{` associé). Les sélecteurs sont émis tels quels — le formateur ne les analyse pas, car l'analyse d'un sélecteur comme `.foo > .bar:hover:not(.baz)` est un problème distinct (CSS Selectors Level 4). Les sélecteurs sont conservés octet par octet, seul l'espacement est normalisé (espaces multiples réduits à un, espaces de fin supprimés) pour qu'un `.a,.b,.c` minifié produise `.a, .b, .c`. Les déclarations sont formatées selon un style choisi : « expanded » (chaque propriété sur sa propre ligne, le plus lisible), « compact » (une règle par ligne, plusieurs déclarations compactées, le plus courant en production) ou « compressed » (minifié, aucun espacement, la sortie la plus petite possible). Les deux-points après le nom de propriété sont toujours suivis d'une espace ; la valeur est émise telle quelle à l'exception de quelques normalisations (zéros de fin supprimés de `0.500` à `.5`, unités retirées de `0px` à `0`, les astuces classiques de minification CSS). La minification est la direction inverse : supprimer les commentaires, réduire les espaces à l'intérieur et entre les déclarations, omettre le point-virgule de fin après la dernière déclaration d'un bloc (valide selon CSS 2.1 §4.1.7), fusionner les blocs de règles adjacents avec le même sélecteur et le même contexte media, et normaliser les valeurs de couleurs (`#ffffff` -> `#fff`, `rgb(255,255,255)` -> `#fff` lorsque c'est possible). Les minifieurs modernes (cssnano, lightningcss, clean-css) effectuent aussi des optimisations structurelles : fusion des propriétés longues en propriétés raccourcies (`margin-top: 1px; margin-right: 1px; margin-bottom: 1px; margin-left: 1px;` -> `margin: 1px;`), suppression des déclarations en double dans une règle, et suppression des règles ne correspondant à aucun élément (`div:has-no-children { color: red; }` dans les passes d'élimination de code mort). Pour la sortie minifiée, la page applique les transformations standard ; pour la sortie lisible, la page applique l'indentation et le style d'accolades choisis. Le module CSS Nesting (CSSWG, rédigé en 2023, Baseline 2024) introduit l'imbrication native : `.a { color: red; & .b { color: blue; } }` est désormais du CSS valide dans les navigateurs modernes (Chrome 112+, Firefox 117+, Safari 16.5+). Avant 2024, l'imbrication nécessitait des réécritures par préprocesseur (Sass `&` ou Less `&` pour chaîner les sélecteurs). La page gère les deux : le CSS imbriqué par préprocesseur est formaté comme du SCSS / Less (en préservant le `&`), et le CSS imbriqué nativement (pas de `&` nécessaire) est formaté par parcours des blocs de règles. Les autres at-rules gérées par la page : @keyframes et @counter-style prennent un corps de déclarations, pas des blocs de règles imbriqués, et se formatent donc différemment (déclarations à l'intérieur de l'at-rule, pas d'accolade imbriquée). @media, @supports, @container, @layer prennent un corps de blocs de règles. @import, @charset, @namespace sont uniquement au niveau supérieur et s'émettent sur leur propre ligne. @property (propriétés personnalisées enregistrées) prend un bloc de déclarations. @font-face est un seul bloc de règles avec un complexe de déclarations sans sélecteur. La page traite chacun selon la forme de son corps définie par la spécification, et non par son nom. Le piège de formatage le plus courant est de casser le contenu à l'intérieur des littéraux de chaînes : `content: "hello world";`, `font-family: "Arial Black", sans-serif;`, `background: url("image.png")` — le formateur ne doit pas réduire l'espace à l'intérieur de la chaîne, ne pas découper l'URL sur `/`, et ne pas toucher au texte du commentaire dans `/* ... */`. Un tokenizer qui suit correctement l'état des chaînes et des commentaires fait la différence entre un formateur qui préserve le contenu de l'utilisateur et un autre qui le déforme. Le tokenizer de la page est artisanal et suffisamment petit pour être vérifié visuellement ; les formateurs de production utilisent postcss ou lightningcss, qui portent la même obligation dans leurs lexers internes.
- Analyse lexicale (CSS Syntax Level 3) : parcours du flux de caractères, émission de tokens ident / at-keyword / hash / string / number / dimension / percentage / url / function / ponctuation / commentaire. Les chaînes et commentaires ont un état — un tokenizer défectueux casse `content: "hello world";`.
- Deux unités structurelles : blocs de règles (sélecteur { déclarations }) et blocs d'at-rules (@media, @supports, @container, @layer encapsulant des blocs de règles). Le formateur parcourt la profondeur d'accolades et indente chaque `{` à un nouveau niveau ; le `}` correspondant réduit le niveau.
- Les sélecteurs sont émis tels quels, avec l'espacement normalisé : `.a,.b,.c` -> `.a, .b, .c`. Le formateur n'analyse pas les sélecteurs (CSS Selectors Level 4 est un problème distinct) — il nettoie seulement les espaces et virgules.
- Styles de sortie : « expanded » (une déclaration par ligne, le plus lisible), « compact » (une règle par ligne, courant en production), « compressed » (pas d'espacement, minifié). Les deux-points + espace après le nom de propriété est la seule règle de formatage universelle.
- Minification : suppression des commentaires, réduction des espaces, omission du `;` final, fusion des règles avec le même sélecteur, normalisation `#ffffff` -> `#fff`, `0.500` -> `.5`, `0px` -> `0`. Fusions structurelles : propriétés longues -> raccourcies (`margin-top: 1px; ... margin-left: 1px;` -> `margin: 1px;`).
- CSS Nesting (CSSWG 2023, Baseline 2024) : `.a { & .b { ... } }` est désormais du CSS natif dans Chrome 112+, Firefox 117+, Safari 16.5+. L'imbrication par préprocesseur d'avant 2024 (Sass `&`, Less) reste valide ; la page formate les deux en parcourant la structure des blocs de règles.
- Corps des at-rules : @keyframes et @counter-style prennent des déclarations ; @media / @supports / @container / @layer prennent des blocs de règles ; @import / @charset / @namespace sont des instructions de niveau supérieur ; @property et @font-face prennent des blocs de déclarations. La page traite chacun selon la forme de son corps définie par la spécification, et non par son nom.
- Limite de sécurité : les littéraux de chaînes (content, noms de polices, URLs) et le texte des commentaires ne sont jamais modifiés par aucune transformation. Un aller-retour octet-par-octet est le test de correction d'un formateur CSS — cassez une chaîne content et l'utilisateur le remarque immédiatement.
Exemples
Formatage de CSS minifié
Entrée : .btn{color:red;background:#fff;padding:8px 16px;border-radius:4px}
Sortie :
.btn {
color: red;
background: #fff;
padding: 8px 16px;
border-radius: 4px;
}Expansion des règles imbriquées
Entrée : .card{padding:16px}.card h2{margin:0 0 8px}.card p{color:#666}
Sortie :
.card {
padding: 16px;
}
.card h2 {
margin: 0 0 8px;
}
.card p {
color: #666;
}Formatage de media query
Entrée : @media(max-width:768px){.nav{display:none}.menu{width:100%}}
Sortie :
@media (max-width: 768px) {
.nav {
display: none;
}
.menu {
width: 100%;
}
}FAQ
Que fait le formateur CSS ?
Il reformate le CSS en une mise en page lisible : indentation cohérente, une déclaration par ligne, espaces autour des deux-points et une règle par ligne. Il ne modifie pas la spécificité des sélecteurs ni les valeurs des propriétés : uniquement les espaces et le placement des accolades.
Va-t-il aussi minifier le CSS ?
Oui s'il y a un bouton « minifier » ou « compresser ». La minification supprime les commentaires et les espaces, raccourcit les couleurs hexadécimales (#ffffff → #fff) et retire le point-virgule final de la dernière déclaration d'une règle. Le sens inverse (embellir) restaure la lisibilité.
Pourquoi n'a-t-il pas corrigé mon CSS invalide ?
C'est un formateur, pas un validateur. Les accolades non appariées, les points-virgules manquants ou les propriétés non reconnues passent tels quels. Utilisez un linter CSS (Stylelint) ou chargez votre CSS dans le panneau des outils de développement du navigateur pour voir les erreurs de syntaxe.
Gère-t-il le CSS moderne (imbrication, container queries, propriétés personnalisées) ?
La plupart des versions utilisent un parser CSS qui comprend la syntaxe actuelle, dont @container, @supports, les propriétés personnalisées (--var), l'imbrication et @layer. Si le parser est plus ancien, une syntaxe nouvelle peut être formatée bizarrement : collez votre CSS et inspectez le résultat avant de l'utiliser.
Mes commentaires seront-ils préservés ?
Oui. Les commentaires de bloc /* ... */ sont préservés par le formateur. Certains minificateurs suppriment les commentaires par défaut ; désactivez cette option si vous en avez besoin. Les commentaires sur une seule ligne // ne sont pas du CSS standard et peuvent être supprimés (ils existent en SCSS, pas en CSS).
Le CSS est-il envoyé en ligne ?
Non. Le formatage s'effectue dans votre navigateur à l'aide d'un parser/printer CSS en JavaScript. Le CSS collé n'est pas transmis.
Puis-je configurer l'indentation ?
Oui : généralement 2 ou 4 espaces, ou des tabulations. Choisissez ce qui correspond au style existant de votre projet. Une indentation mixte dans l'original est normalisée selon votre choix.