Safari & tests

CSS text-wrap: balance et pretty en 2026 pour titres HTML statiques, QA Safari terrain et validation Cloud Mac

MacHTML Lab2026.04.2214 min de lecture

Les pages marketing en HTML statique affichent encore des titres sur plusieurs lignes dans des cartes étroites. Sans intervention, la dernière ligne ressemble souvent à un moignon : un mot court pend alors que la ligne au-dessus est pleine. En 2026, text-wrap: balance demande au moteur de répartir les coupures pour lisser les longueurs visuelles, tandis que text-wrap: pretty affine le flot des paragraphes lorsque le navigateur peut harmoniser césures et coupures. Ni l’un ni l’autre ne remplace une bonne rédaction, mais ils évitent des centaines de <br> manuels qui cassent dès qu’on traduit. Lisez aussi Core Web Vitals : laboratoire Lighthouse contre Safari réel pour ne pas confondre polish typographique et gains LCP, ainsi que field-sizing pour formulaires HTML statiques lorsque les cartes mélangent titres et zones auto-agrandissantes.

Ce guide s’adresse aux auteurs de sites statiques, aux mainteneurs de design system et à toute équipe qui doit valider sous Safari sur macOS avant mise en ligne. Nous relions la mécanique CSS aux contraintes terrain : zoom, contrastes élevés, polices web tardives et captures pixel-perfect exigées par la direction artistique.

Titres orphelins sur pages statiques

Les pipelines d’export ignorent souvent la largeur finale des cartes. Les designers compensent par des retours ligne « doux » qui explosent quand la traduction française allonge le texte ou modifie les articles contractés. Des règles déclaratives survivent mieux aux locales parce qu’elles réagissent à la largeur rendue, pas à l’intuition de la maquette.

Les héros au-dessus des photos posent un second problème : un flot irrégulier détourne l’œil du bouton placé juste en dessous. Dans les grilles produit, une deuxième ligne trop courte ressemble à une phrase inachevée même si la grammaire est correcte. Les équipes qui ne testent qu’en maquette desktop oublient le partage d’écran, les fenêtres étroites et les PDF générés par les prospects.

Le HTML statique impose une discipline de version : chaque build doit être rejoué. Une petite modification CSS touche toutes les pages exportées ; prévoyez donc un plan de retour arrière avant la mise en production, pas après les tickets support.

Mécanique et limites de text-wrap: balance

Appliquez balance aux éléments lus comme un seul titre :

.card-title {
  text-wrap: balance;
  max-inline-size: 22ch;
}

Associez une max-inline-size raisonnable pour borner le travail du moteur. Les chaînes interminables sans coupures naturelles exigent overflow-wrap: anywhere pour éviter les débordements, même avec balance.

Le rééquilibrage a un coût : sur téléphones modestes, les changements d’orientation peuvent provoquer plus de reflows. Limitez les transitions de largeur animées à 300 ms lorsque balance est actif afin d’éviter des boucles saccadées. Si le marketing anime aussi la taille de police, mesurez l’interaction—c’est une source fréquente de retours « inconfort visuel ».

Avec hyphens, le français peut gagner en lisibilité, mais des césures agressives dans un titre paraissent amateur. Balance lisse les lignes ; il ne remplace pas une ligne éditoriale courte et claire.

text-wrap: pretty pour le texte d’accompagnement

Utilisez pretty sur les paragraphes où l’harmonie du rag prime sur la micro-perf—notes de bas de page, encadrés explicatifs, pas fils d’actualité infinis. Empiler pretty sur chaque paragraphe d’un long article augmente le coût sous Safari lorsque les sélecteurs se complexifient.

Pretty vise surtout le bord droit irrégulier : le navigateur favorise des coupures plus esthétiques lorsque la césure est permise. Ce n’est pas une promesse de perfection ; c’est une légère correction. Associez-le à des paragraphes respirables : un mur de texte reste fatigant même avec pretty.

Pour les pages d’aide en français, synchronisez le glossaire marketing : les noms de produit et codes ne doivent pas être coupés au mauvais endroit. Si le CMS maintient des dictionnaires, alignez-les sur l’export HTML pour éviter que pretty ne lutte contre les règles de marque.

Matrice : quand balance aide ou gêne

ContextebalanceNotes
Titres de carteOuiLes blocs courts multi-lignes gagnent le plus.
Mentions légales capitalesPrudenceLe letter-spacing peut interagir ; tester systématiquement.
Blocs de codeNonPréserver la monospace et les numéros de ligne.
Libellés de navigationRarementLes libellés une ligne n’apportent rien.

Cette matrice est un guide, pas une loi. Pour du texte légal en capitales avec text-transform et des conteneurs serrés, privilégiez la lisibilité avant balance et réservez les ajustements manuels aux cas extrêmes documentés.

Safari et scripts mixtes

WebKit peut choisir d’autres points de coupure lorsque latin et CJK cohabitent. Capturez des captures à 320, 390 et 834 px pour chaque locale. Si les coupures japonaises paraissent trop serrées, examinez line-break: strict séparément de balance.

Testez Safari Technology Preview lorsque votre calendrier couvre plusieurs mineures de macOS : les modules texte évoluent vite en 2026. Un correctif entre bêta et stable peut décaler d’un pixel des alignements critiques pour la charte.

Les captures CI doivent noter la famille GPU : Apple Silicon et iGPU Intel diffèrent légèrement sur l’anticrénelage subpixel. Rarement bloquant, cela explique pourtant des écarts de revue entre machines.

Accessibilité et couleurs forcées

Balance ne change pas l’ordre DOM, mais les agrandissements forts voient les retours à la ligne bouger. Évitez d’animer la taille de police en même temps qu’un basculement de balance—des utilisateurs vestibulaires ont signalé des inconforts en QA interne.

Sous forced-colors: active, vérifiez contraste et chevauchement avec les images lorsque les coupures déplacent le bloc. Contrôlez aussi les anneaux de focus : une ligne de titre plus haute peut rapprocher un bouton du contour.

VoiceOver lit le titre entier si la hiérarchie est correcte. Un div stylé en titre reste une erreur d’accessibilité et de SEO—balance ne corrige pas ce choix.

Progressive enhancement

@supports (text-wrap: balance) {
  .hero-title { text-wrap: balance; }
}

Livrez d’abord le fallback, puis la règle moderne, pour que les navigateurs anciens ignorent les déclarations inconnues sans invalider tout le bloc. Si PostCSS réordonne les propriétés, documentez la contrainte pour éviter les surprises en production.

Pour les campagnes critiques, un bundle CSS de base sans text-wrap, puis une couche enrichie, réduit les hotfix lorsqu’un navigateur d’entreprise reste en retard.

Garde-fous performance

Sur mobile, limitez-vous à environ douze éléments balance actifs par viewport—au-delà, profilez. contain: inline-size peut aider sur les cartes, mais un mauvais containment rogne les anneaux de focus si le rayon est court.

Balance peut légèrement modifier la hauteur d’un bloc : croisez CLS avec captures pour distinguer vraies régressions et bruit lié aux polices tardives. Un saut sur .hero-title indique souvent une largeur max manquante, pas balance lui-même.

Le cache CDN peut servir d’anciennes feuilles avec du HTML neuf : synchronisez hashs ou noms de fichiers pour éviter les couples incohérents.

Collaboration contenu

Donnez des budgets en ch, pas en pixels, pour que les traductions héritent des mêmes limites. Documentez-les dans Storybook ou le manuel design, pas seulement dans un fil Slack.

Lors d’A/B tests, versionnez le texte séparément du CSS pour que les analytics n’attribuent pas des conversions au hasard à une modification de mise en page.

Formez les auteurs sur espaces insécables et tirets : les caractères invisibles importés depuis Word perturbent l’algorithme de balance.

RTL et propriétés logiques

Avec dir="rtl", balance optimise toujours le rag, mais vos max-inline-size doivent être logiques pour ne pas rogner les titres arabe ou hébreu. Revérifiez le padding des deux côtés après miroir.

Les icônes dans les titres doivent utiliser margin-inline-start plutôt que margin-left pour rester alignées après inversion de direction.

Si vous mélangez langues inline, fixez les règles de police par plage Unicode sinon les hauteurs de ligne fluctuent et balance semble « presque juste ».

Check-list de tests terrain

  1. Trois breakpoints avec la variante locale la plus longue réellement publiée.
  2. Activer « Augmenter le contraste » sur macOS et vérifier les chevauchements avec les cartes arrondies.
  3. Imprimer en PDF depuis Safari et Chrome ; comparer les coupures près des blocs balance.
  4. Enregistrer 30 secondes de redimensionnement lent et vérifier que le reflow reste sous 100 ms de budget image sur une base M3.

Signaux RUM pour régressions typo

Lighthouse ne score pas text-wrap, mais le CLS des conteneurs de titre proxy la qualité. Alerte si le CLS élémentaire de .hero-title dépasse 0,01 après déploiement CSS—souvent une largeur max absente.

Croisez avec des replays filtrés Safari pour ne pas poursuivre du bruit Chrome. Corrélez avec le chargement des polices web : une police tardive est souvent le coupable.

Si les titres sont cliquables, surveillez INP : un reflow ne doit pas déplacer la cible au moment du clic.

Tokens et classes utilitaires

Si vous exposez .text-balance, ne l’embarquez pas partout : tree-shakez et préférez des styles de composant pour les exports statiques afin de garder le gzip sous contrôle.

Avec des échelles fluides clamp(), recalculez les plafonds ch quand la courbe change—un plafond obsolète ruine balance.

Alignez les noms de tokens Figma et code pour éviter les malentendus entre designers et ingénieurs.

CMS et garde-fous éditoriaux

Les éditeurs WYSIWYG ajoutent parfois des espaces insécables « utiles » qui faussent balance. Filtrez \u00A0 sauf besoin explicite.

Offrez une prévisualisation qui charge les polices de prod, pas les polices système, sinon le rag diffère au moment de la publication.

Versionnez les schémas de contenu quand de nouveaux niveaux de titre apparaissent pour éviter les migrations silencieuses vers des composants incompatibles.

Passage aux équipes plateforme

Documentez quels bords CDN cachent HTML vs CSS afin que l’ordre de purge ne serve jamais une typo périmée avec du contenu neuf. Gardez un rollback d’une ligne qui retire text-wrap sans toucher au markup.

Avec l’intégrité des sous-ressources, incrémentez le hash CSS dès que les utilitaires de titre changent, même si le HTML est identique.

Tenez un journal par release utilitaire pour rattacher les captures support à une révision précise.

FAQ

Les boutons doivent-ils utiliser balance ?

En général non—gardez les libellés sur une ligne avec ellipse si nécessaire.

Le print hérite-t-il de balance ?

Parfois ; réinitialisez dans @media print si votre PDF montre des coupures étranges.

Remplace-t-il les container queries ?

Non : les container queries fixent la largeur ; balance optimise les coupures à l’intérieur.

Les corrections typographiques se valident le mieux sur le même matériel que vos utilisateurs. Un Mac mini Apple Silicon exécute Safari avec des caches de polices proches de la production et un rendu subpixel réaliste, tout en restant silencieux pour de longues sessions de revue. Les locations cloud MacHTML autour de 16,9 $ par jour permettent un hôte QA dédié, des captures automatisées via SSH et l’accès VNC designers sans acheter une nouvelle machine de bureau.

Valider text-wrap sur du matériel Safari réel

Louez un Mac mini cloud, chargez votre export HTML statique et comparez les rags de titres pour toutes les locales avant de fusionner les tokens typo.

Peaufiner les titres sur Mac cloud
Dès 16,9 $/jour