- Les principaux navigateurs déploient actuellement une mise à jour qui modifie le style par défaut (style UA) de la balise
<h1>
- Cela affecte en particulier les
<h1> utilisés à l’intérieur d’éléments imbriqués comme section, article, nav ou aside
- Les développeurs doivent être vigilants, car ce changement peut entraîner des variations de style inattendues sur les sites ou des avertissements Lighthouse
Qu’est-ce qui change ?
- La spécification HTML contenait autrefois une règle appelée « algorithme de plan » (outline algorithm), selon laquelle un
<h1> pouvait être affiché visuellement comme un <h2> ou un <h3> en fonction du niveau d’imbrication des éléments de sectionnement
- Par exemple,
section > h1 était rendu comme un <h2>, et section > section > h1 comme un <h3>
- Cela n’était pas reflété dans l’arbre d’accessibilité et était interprété différemment selon les outils, ce qui créait de la confusion
- Au final, cet algorithme a été retiré de la spécification HTML en 2022, et les navigateurs sont désormais en train de supprimer le style UA associé
Exemple d’ancien style UA des navigateurs
- x h1 { font-size: 1.50em }
- x x h1 { font-size: 1.17em }
- x x x h1 { font-size: 1.00em }
- x x x x h1 { font-size: 0.83em }
- x x x x x h1 { font-size: 0.67em }
Exemple de structure HTML
<body>
<h1>Level 1</h1>
<section>
<h1>Level 2</h1>
<section>
<h1>Level 3</h1>
<section>
<h1>Level 4</h1>
</section>
</section>
</section>
</body>
Changements attendus et calendrier
- Un
<h1> ne verra plus automatiquement son style modifié simplement parce qu’il se trouve dans des éléments section imbriqués
- Le style UA appliquera désormais le même style à tous les
<h1>
- Dans Lighthouse, un avertissement s’affiche si aucun
font-size n’est défini pour <h1>
- Avertissement affiché :
H1UserAgentFontSizeInSection
Firefox
- À partir du 31 mars 2025, Firefox Beta 138 commence à déployer ce changement de style pour 50 % des utilisateurs desktop
- Firefox Stable 138 sera déployé à 5 % des utilisateurs, puis la diffusion complète est prévue d’ici la version 140
- À partir de Firefox 136, un avertissement s’affiche dans la console si
font-size ou les marges ne sont pas définis
- Pour modifier ce comportement : dans
about:config, définir layout.css.h1-in-section-ua-styles.enabled sur false
Chrome
- À partir de Chrome 136, un avertissement s’affiche si
<h1> utilise encore le style par défaut réduit
- Cela peut affecter le score « Best Practices » de Lighthouse
Safari
- Il n’existe pas encore de mise à jour concrète ni de suivi de bug spécifique, mais une évolution similaire est attendue dans WebKit
Comment corriger l’avertissement Lighthouse
- Lighthouse affiche cet avertissement en se basant sur les alertes de Chromium DevTools lorsqu’aucun
font-size n’est défini pour <h1>
- Pour l’éviter, il faut définir explicitement un style pour
<h1>
Exemple de style
h1 {
margin-block: 0.67em;
font-size: 2em;
}
- Pour éviter la specificity (priorité), utilisez
:where()
:where(h1) {
margin-block: 0.67em;
font-size: 2em;
}
Checklist récapitulative
- Ne pas dépendre du style par défaut du navigateur
- Utiliser correctement
<h2>, <h3>, etc. pour exprimer explicitement la hiérarchie
- Définir explicitement
font-size et margin pour tous les <h1>
- Mettre à jour le CSS reset pour refléter ce changement
- Vérifier les avertissements avec Lighthouse et DevTools
- Consulter la documentation MDN concernée pour rester à jour
Ressources associées
1 commentaires
Commentaires sur Hacker News
Déploiement auprès de 5 % des utilisateurs dans la version stable de Firefox 138, avec un élargissement prévu à 50 %
Le contexte historique de l’algorithme d’outline adopté par le W3C est jugé intéressant
Certains se demandent depuis quand le comportement de
h1figure dans la spécificationCertains disent n’avoir jamais vraiment réfléchi en profondeur au comportement des éléments de section (
<section>,<aside>,<nav>,<article>) et de la balise<h1>Certains regrettent que l’algorithme d’outline n’ait pas réussi
<h1>et lui donner le sens de « titre principal dans mon contexte » plutôt que dans le contexte global du documentCertains estiment qu’une balise
<h1>devrait rester une<h1>quel que soit son emplacementCertains pensent que cette complexité explique pourquoi beaucoup de designers utilisent
<div>pour toutroleCertains trouvent que les en-têtes HTML sont un peu absurdes
<section>h1eth2créent une structure hiérarchique et des balises explicites différentes du reste des formats HTML