Un thème sombre qui ne clignote pas
Le thème doit être appliqué avant la première peinture, ce qu'un module différé ne peut pas faire.
IntermédiaireArticle4 étapes
Le clignotement de thème a une seule cause : le thème est appliqué après que le navigateur a déjà peint la page. Tout le reste en découle.
1. Poser les tokens sur la racine
Le thème est porté par un attribut sur <html>, et chaque couleur passe par une variable
CSS. Changer l’attribut re-thème alors toute la page d’un coup, sans qu’aucun composant ne
connaisse le thème courant.
2. Résoudre le thème dans le <head>
Le script doit être en ligne et bloquant. Un module type="module" est différé par
définition : il s’exécutera après la peinture, et le visiteur verra la page changer sous
ses yeux.
3. Faire primer un choix explicite
Sans choix mémorisé, on suit prefers-color-scheme. Avec, le choix gagne — y compris si
la préférence système change ensuite.
4. Vérifier au bon endroit
Un test qui lit l’attribut après chargement passera même si le script est différé. Il faut le lire à la première frame, ce qui est le plus proche de ce que l’œil a vu.