Préchargez les polices facultatives pour éviter les décalages de mise en page et les flashs de texte invisible (FOIT).

À partir de Chrome 83, vous pouvez combiner les attributs link rel="preload" et font-display: optional pour supprimer complètement les à-coups de mise en page.

En optimisant les cycles de rendu, Chrome 83 élimine le décalage de mise en page lors du préchargement des polices facultatives. Combiner <link rel="preload"> avec font-display: optional est le moyen le plus efficace de garantir l'absence de sauts de mise en page lors de l'affichage de polices personnalisées.

Compatibilité du navigateur

Consultez les données de MDN pour obtenir des informations à jour sur la compatibilité multinavigateur:

Rendu des polices

Le décalage de mise en page, ou refonte, se produit lorsqu'une ressource d'une page Web change de manière dynamique, ce qui entraîne un "décalage" du contenu. L'extraction et le rendu des polices Web peuvent entraîner directement des décalages de mise en page de deux manières:

  • Une police de remplacement est remplacée par une nouvelle police ("flash de texte sans style")
  • Le texte "invisible" s'affiche jusqu'à ce qu'une nouvelle police soit affichée sur la page ("flash de texte invisible").

La propriété CSS font-display permet de modifier le comportement de rendu des polices personnalisées à l'aide d'une plage de valeurs différentes (auto, block, swap, fallback et optional). Le choix de la valeur à utiliser dépend du comportement souhaité pour les polices chargées de manière asynchrone. Toutefois, jusqu'à présent, chacune de ces valeurs compatibles pouvait déclencher une nouvelle mise en page de l'une des deux manières indiquées ci-dessus.

Polices facultatives

La propriété font-display utilise une chronologie de trois périodes pour gérer les polices qui doivent être téléchargées avant de pouvoir être affichées:

  • Bloquer:affichez du texte "invisible", mais passez à la police Web dès que le chargement est terminé.
  • Remplacement:affichez le texte à l'aide d'une police système de remplacement, mais passez à la police Web dès que le chargement est terminé.
  • Échec:affichez le texte à l'aide d'une police système de remplacement.

Auparavant, les polices désignées par font-display: optional avaient une période de blocage de 100 ms et aucune période d'échange. Cela signifie que le texte "invisible" s'affiche très brièvement avant de passer à une police de remplacement. Si la police n'est pas téléchargée sous 100 ms, la police de remplacement est utilisée et aucun échange n'a lieu.

Schéma illustrant l&#39;ancien comportement facultatif des polices en cas de non-chargement
Ancien comportement de font-display: optional dans Chrome lorsque la police est téléchargée après la période de blocage de 100 ms

Toutefois, si la police est téléchargée avant la fin de la période de blocage de 100 ms, la police personnalisée est affichée et utilisée sur la page.

Diagramme illustrant l&#39;ancien comportement facultatif des polices lors du chargement de la police dans le temps
Ancien comportement de font-display: optional dans Chrome lorsque la police est téléchargée avant la période de blocage de 100 ms

Chrome effectue un deuxième rendu de la page dans les deux cas, que la police de remplacement soit utilisée ou que la police personnalisée termine son chargement à temps. Cela provoque un léger scintillement du texte invisible et, dans le cas où une nouvelle police est affichée, un décalage de mise en page qui déplace une partie du contenu de la page. Cela se produit même si la police est stockée dans le cache disque du navigateur et peut se charger bien avant la fin de la période de blocage.

Des optimisations ont été apportées à Chrome 83 pour supprimer entièrement le premier cycle de rendu des polices facultatives préchargées avec <link rel="preload'>. Au lieu de cela, le rendu est bloqué jusqu'à ce que la police personnalisée ait fini de se charger ou qu'un certain temps se soit écoulé. Ce délai avant expiration est actuellement défini sur 100 ms, mais il est susceptible d'être modifié dans un avenir proche pour optimiser les performances.

Schéma illustrant le nouveau comportement des polices facultatives préchargées en cas d&#39;échec du chargement de la police
Nouveau comportement de font-display: optional dans Chrome lorsque les polices sont préchargées et téléchargées après la période de blocage de 100 ms (pas de flash de texte invisible)
Schéma illustrant le nouveau comportement des polices facultatives préchargées lorsque la police se charge à temps
Nouveau comportement de font-display: optional dans Chrome lorsque les polices sont préchargées et téléchargées avant la période de blocage de 100 ms (pas de flash de texte invisible)

Le préchargement des polices facultatives dans Chrome élimine les risques de décalage de mise en page et de clignotement du texte non stylisé. Cela correspond au comportement requis tel que spécifié dans le niveau 4 du module de polices CSS, où les polices facultatives ne doivent jamais entraîner de refonte, et les user-agents peuvent plutôt retarder le rendu pendant une période appropriée.

Bien qu'il ne soit pas nécessaire de précharger une police facultative, cela augmente considérablement les chances qu'elle se charge avant le premier cycle de rendu, en particulier si elle n'est pas encore stockée dans le cache du navigateur.

Conclusion

L'équipe Chrome souhaite connaître votre expérience de préchargement des polices facultatives avec ces nouvelles optimisations. Signalez un problème si vous rencontrez des problèmes ou si vous souhaitez suggérer des fonctionnalités.