Intermédiaire 8 min de lecture 25 janvier 2025

Collapse whitespace en HTML et CSS

Vous alignez vos textes, mais le navigateur réduit vos espaces, casse des retours à la ligne ou empêche une coupure là où vous l'attendez. C'est le collapse whitespace en action. Comprendre comment les navigateurs compriment les blancs vous évite des surprises, des bugs d'affichage et des écarts entre données brutes et rendu final.

Qu'est-ce que le collapse whitespace ?

C'est la règle selon laquelle les navigateurs compressent des séquences de blancs (espaces, tabulations, retours) en un seul espace dans la plupart des contextes HTML, sauf exceptions contrôlées par white-space en CSS ou par des entités comme  .

Les catégories d'espaces et leur comportement dans le collapse :

1 Blancs HTML compressés par défaut

Espaces traités comme équivalents et compressés en un seul caractère dans le flux texte.

Space (32), Tab (9), CR (13), LF (10)

2 Contrôles ASCII et rendu inattendu

Ces codes ne sont pas des blancs HTML classiques et peuvent perturber le texte si présents.

NUL (0), BEL (7), ESC (27), DEL (127)

3 Espaces Unicode et exceptions au collapse

Certains blancs ne sont pas compressés ou empêchent la césure comme un espace normal :

NBSP (U+00A0) - Espace insécable, ne collapse pas
ZWSP (U+200B) - Zero Width Space, affecte la casse des lignes
ZWNBSP (U+FEFF) - Zero Width No-Break Space
Thin Space (U+2009), Hair Space (U+200A) - Comportements spécifiques

4 Marques techniques et césure

Éléments qui influencent le rendu ou la segmentation des mots :

BOM (U+FEFF) - Byte Order Mark
Soft Hyphen (U+00AD) - Césure conditionnelle
LRM, RLM, LRE, RLE - Contrôles Bidi

Problèmes classiques

Copier-coller web/Word et espaces insécables

Des   se glissent et empêchent le collapse ou les retours automatiques.

Tests qui comparent données et rendu

Le navigateur collapse les blancs, votre test de chaîne ne le fait pas : divergences inattendues.

Trim() n'est pas collapse()

Trim supprime en bordure, pas au milieu. Le rendu navigateur compresse tout le flux.

Regex \s ou \w ambiguës

Elles ne couvrent pas toujours NBSP et co., la logique de collapse n'est pas identique au matching.

Exemple de problème courant :

# Deux chaînes différentes qui se ressemblent une fois collapsées
string1 = "A B"
string2 = "A B" # Même rendu en HTML normal
assert string1 == string2 # ❌ Échec car données brutes ≠ rendu collapsé

Symptômes qui doivent vous alerter

🚨 Signaux d'alarme

!
Le rendu HTML supprime vos doubles espaces que vous pensiez intentionnels
!
Des retours à la ligne disparaissent en dehors des balises <pre>
!
Un élément passe à la ligne malgré des espaces censés tenir sur une seule ligne
!
Changer CSS white-space modifie le texte sans toucher au HTML
!
Un copier-coller insère des NBSP qui bloquent la césure

Comment les détecter

Solution recommandée : Clean ASCII

Clean ASCII met en évidence les suites de blancs, les NBSP, les tabulations et retours, et vous aide à simuler le collapse whitespace pour rapprocher vos données du rendu navigateur.

✅ Détection automatique

Séquences d'espaces, tabs, NBSP, ZWSP, soft hyphens

📊 Analyse complète

Positions exactes, visualisation, règles white-space pertinentes

🧹 Normalisation

Remplacement intelligent par des espaces standards et collapse contrôlé

💾 Export propre

Texte uniformisé, prêt pour un affichage cohérent

Autres méthodes de détection

Affichage dans l'éditeur

Activez "render whitespace: all" pour visualiser les espaces, tabs et fins de ligne
Surlignez les NBSP et ZWSP via un linter ou une extension

En ligne de commande (Unix)

# Repérer des caractères hors ASCII imprimable (dont NBSP)
grep -P "[^\x09\x0A\x0D\x20-\x7E]" fichier.txt
# Visualiser les fins de ligne et tabulations (impact sur collapse)
sed -n l fichier.txt
# Afficher les caractères de contrôle et séquences d'espaces
cat -A fichier.txt
# Inspecter les octets (0xC2 0xA0 = NBSP)
hexdump -C fichier.txt

En code

JavaScript

const collapsed = str.replace(/[ \t\r\n\f]+/g, " ").replace(/\u00A0/g, "\u00A0");

Python

re.sub(r"[ \t\r\n\f]+", " ", s).replace("\u00A0", "\u00A0")

Excel / Google Sheets

TRIM(SUBSTITUTE(A1;CAR(160);" "))

Nettoyer et prévenir

🚀 Normaliser rapidement avec Clean ASCII

Avant d'ajouter des règles complexes, utilisez Clean ASCII pour collapser les séquences d'espaces, convertir les NBSP indésirables et sécuriser votre rendu.

Détection des suites de blancs
Remplacement et collapse maîtrisés
Export immédiat

Méthodes techniques avancées

🔧 Normaliser

Uniformisez le rendu avec white-space: normal; là où c'est pertinent
Conservez les blancs via white-space: pre/pre-wrap quand c'est nécessaire
Harmonisez les fins de ligne (dos2unix, gitattributes) pour des comportements stables

🧹 Filtrer

Implémentez une fonction collapse_whitespace() côté serveur/client
Remplacez les NBSP non voulus par des espaces simples
Bloquez les caractères de contrôle hors LF/CR/HT pour éviter des surprises

⚙️ Automatiser

Hooks pre-commit pour refuser des suites d'espaces non conformes
Tests de normalisation sur les inputs utilisateurs (collapse + NBSP)
Linting CI pour conserver des règles white-space cohérentes

Checklist rapide

Politique CSS claire: white-space défini selon le contexte
NBSP remplacés quand l'insécabilité n'est pas utile
Éditeur configuré pour afficher espaces, tabs et retours
Fonctions utilitaires de collapse dans vos libs
Tests garantissant un rendu identique après normalisation
Documentation équipe sur collapse whitespace et NBSP

Conclusion

Le collapse whitespace explique la plupart des écarts entre texte brut et rendu HTML. En le maîtrisant, vous obtenez un affichage stable et évitez les bidouilles fragiles.

Standardisez vos blancs, contrôlez white-space et traitez les NBSP à la source pour des interfaces plus prévisibles.

Normalisez vos espaces dès maintenant

Utilisez notre outil pour visualiser, comprendre et corriger les suites d'espaces avant qu'elles ne cassent votre rendu.

Analyser mon texte