Enquête sur les problèmes du mode sombre de l'e-mail de résumé d'activité

Ceci était censé être un court article avec quelques images et une solution facile à appliquer. Les choses ont dégénéré. Les e-mails HTML sont difficiles. Pour vous amuser un peu, voici comment cela peut mal tourner : Gmail's dark mode · Issue #68 · hteumeuleu/email-bugs · GitHub :slight_smile:

N’hésitez pas à survoler cet article et à regarder les images. À la fin de l’article, j’étais plus ou moins arrivé à la conclusion qu’en raison de la popularité du mode sombre, il pourrait être utile de retravailler l’e-mail de résumé, au lieu d’essayer de pirater des solutions sur son code actuel. Ce n’est pas à moi de décider, et peut-être que je regarde cela depuis trop longtemps.


Il y a eu quelques questions récentes sur la façon dont les e-mails de résumé sont rendus sur les clients de messagerie configurés en mode sombre. Le principal problème est que la couleur d’arrière-plan de l’en-tête du résumé est inversée sur les clients de messagerie qui gèrent le mode sombre en effectuant une inversion complète des couleurs (application Gmail (iOS), Outlook 2021 (Windows), Office 365 (Windows) et Windows Mail). Cela crée un problème de contraste entre la couleur de l’en-tête et le logo du site.

Ces clients de messagerie ont également un problème avec la couleur du texte des boutons et la section “Depuis votre dernière visite” du résumé.

Toutes les images ci-dessous proviennent du service de test d’e-mails Litmus :

D’un site Discourse avec un schéma de couleurs sombres, utilisant un logo PNG blanc avec un fond transparent :

Attendu (Gmail App Dark pour Android) :

Mauvais (Gmail Dark pour iOS, OL Office 365 Dark, Outlook 2021 Dark, Windows 10 Mail Dark) :

Aperçu des clients mobiles (Gmail pour iOS est le seul client présentant des problèmes évidents avec la couleur de l’en-tête) :

Voici le même test avec l’e-mail de résumé de Meta (schéma de couleurs claires par défaut, logo PNG sombre sur fond transparent). Notez que Meta n’a pas activé le paramètre de site apply custom styles to digest (appliquer des styles personnalisés au résumé), il ne reçoit donc pas les balises et styles méta du mode sombre pour les clients qui les prennent en charge (Apple Mail et les versions récentes de Mail sur iOS). Si le paramètre apply custom styles to digest était activé, je soupçonne que les tests iPhone Dark auraient également des problèmes de contraste entre le logo et la couleur de fond.

Il existe plusieurs façons de forcer la couleur d’arrière-plan de l’en-tête de l’e-mail à correspondre à la couleur du schéma de couleurs par défaut du site :

Pour l’application Gmail pour iOS, la couleur d’arrière-plan de l’en-tête peut être définie avec une image d’arrière-plan créée avec un linear-gradient. Les images d’arrière-plan créées de cette manière ne voient pas leur couleur inversée. L’astuce consiste à définir les deux couleurs du linear-gradient sur la valeur de la couleur “arrière-plan de l’en-tête” du schéma de couleurs par défaut du site Discourse.

Cela peut être réalisé dès maintenant en ajoutant du CSS personnalisé dans l’onglet Admin / Customize / Email Style / CSS. Définissez les valeurs de couleur sur la valeur de la couleur “arrière-plan de l’en-tête” de votre schéma de couleurs par défaut. (Notez qu’il n’est pas possible d’utiliser var(--header_background) pour définir la couleur dans l’éditeur CSS des e-mails) :

.digest-header {
    background-image: linear-gradient(#111, #111);
}

En testant cette approche pour l’e-mail de résumé de Meta, je commence à avoir des doutes quant à sa validité en tant que solution pour les sites qui ont un schéma de couleurs par défaut clair. Le logo est lisible, mais cela semble un peu étrange ?

Pour les clients de messagerie de bureau Outlook 2021 Dark et Windows 10 Mail Dark, le problème d’inversion de la couleur d’arrière-plan de l’en-tête peut être résolu en ajoutant une règle !important à la background-color définie pour le .digest-header. Cela ne peut pas être réalisé via du CSS personnalisé car Discourse ajoute déjà un style background-color à l’élément sans la règle !important. Cette règle est ajoutée après le CSS personnalisé, elle a donc la priorité. (Notez que cette approche ne semble fonctionner que pour forcer la couleur d’arrière-plan à une couleur sombre. Elle échoue lorsque j’essaie de l’utiliser pour forcer l’arrière-plan de l’en-tête à #ffffff.)

Le problème de la couleur du texte dans la section “Depuis votre dernière visite” pour les clients de messagerie qui effectuent une inversion complète des couleurs ne semble pas avoir de solution facile. Il existe un hack pour Gmail sur iOS suggéré ici : Fixing Gmail’s dark mode issues with CSS Blend Modes — HTeuMeuLeu.com. Il utilise des modes de fusion pour tromper Gmail afin qu’il définisse une couleur de texte blanche. Cela fonctionne en théorie, mais compte tenu de la complexité du balisage de l’e-mail de résumé, je ne pense pas que cela vaille la peine d’être poursuivi.

En résumé, je pense que pour les sites Discourse qui ont un schéma de couleurs sombres comme schéma de couleurs par défaut, une bonne solution pour l’instant serait d’ajouter le CSS que j’ai posté ci-dessus à leur onglet Email Style / CSS. Cela rendra le logo du site lisible sur l’application Gmail Dark pour iOS. L’ajout n’a causé aucun problème avec d’autres clients de messagerie que j’ai testés. Pour les sites qui ont un schéma de couleurs claires par défaut, je suis moins sûr de cette approche. Forcer un arrière-plan d’en-tête blanc sur un écran autrement sombre n’est pas très esthétique.

L’e-mail de résumé a été développé avant que le mode sombre ne soit couramment utilisé. Peut-être qu’en raison de la popularité récente du mode sombre, il serait logique de retravailler l’e-mail de résumé dans le but de l’afficher correctement en mode sombre et clair sur les clients de messagerie populaires.

Si retravailler complètement l’e-mail de résumé est hors de portée, il pourrait être utile d’envisager de fournir des paramètres dark_mode_digest_logo et light_mode_digest_logo. Sur au moins certains clients de messagerie, il sera possible de détecter le mode et d’afficher le logo approprié.

Pour améliorer le mode sombre sur les clients de bureau Outlook, Discourse pourrait laisser certains noms de classe dans le HTML de l’e-mail au lieu de tous les supprimer. Ces noms de classe pourraient être utilisés pour cibler le mode sombre sur Outlook : https://litmus.com/community/discussions/8256-outlook-app-vs-dark-mode-on-ios-a-disaster#comment-16402. (Notez qu’Outlook ne peut pas gérer plusieurs noms de classe sur un élément, donc certains noms de classe devraient toujours être supprimés du fichier digest.html.erb.)

7 « J'aime »

J’ai réalisé que je n’avais peut-être pas énoncé le problème le plus évident assez clairement. Le paramètre du site appliquer des styles personnalisés au résumé est activé par défaut. Ce paramètre est utilisé pour ajouter des balises méta et des règles CSS qui font que les clients de messagerie iOS affichent les e-mails en mode sombre si l’utilisateur a activé le mode sombre sur l’appareil.

À moins qu’un soin particulier ne soit pris pour télécharger un logo de résumé ayant un contraste suffisant sur des arrière-plans clairs et sombres, les e-mails de résumé des sites dont le logo est optimisé pour les arrière-plans clairs, visualisés en mode sombre sur les clients de messagerie populaires, ressembleront à ceci :

La désactivation du paramètre du site appliquer des styles personnalisés au résumé produira en fait de meilleurs résultats. Avec ce paramètre désactivé, les styles du mode sombre ne seront pas appliqués aux applications de messagerie iOS. Ils seront toujours appliqués aux clients de messagerie Android et à l’application Gmail iOS.

Peut-être que la meilleure pratique actuelle devrait être d’essayer de télécharger un logo dans le paramètre du site logo du résumé qui s’affiche bien sur des arrière-plans clairs et sombres. Si cela ne peut pas être fait, les sites Discourse avec un schéma de couleurs par défaut clair devraient désactiver le paramètre du site appliquer des styles personnalisés au résumé. Les sites Discourse avec un schéma de couleurs par défaut sombre devraient garder le paramètre activé. Ne prenez pas le conseil concernant le paramètre du site appliquer des styles personnalisés au résumé comme définitif pour le moment, mais d’après quelques tests, cela semble être l’approche correcte.

Cela ne fonctionnerait que pour les clients de messagerie qui prennent en charge @media (prefers-color-scheme) : Can I email… @media (prefers-color-scheme). Il y aurait un risque que les deux versions du logo apparaissent sur d’autres clients de messagerie.

5 « J'aime »

Merci pour ce travail approfondi Simon :+1: :exploding_head:

C’est terrible. Je rencontre ce problème sur mon smartphone et je ne comprends même pas comment l’inversion forcée des couleurs, indépendamment du contenu, a pu être considérée comme une bonne idée.

3 « J'aime »

Je me demande si une solution possible serait, au lieu d’utiliser le logo, de créer une image au format rectangulaire en utilisant le logo du site et la couleur d’arrière-plan de l’en-tête actuellement utilisée par le site.

Nous devrions le faire en backend, mais l’utilisation d’un bloc d’image avec la couleur incluse comme arrière-plan empêcherait Gmail d’inverser la couleur de l’arrière-plan.

Pour information, j’ai testé plusieurs e-mails de grandes marques dans mon application Gmail en mode sombre, et la majorité d’entre elles n’ont pas non plus résolu ce problème.

2 « J'aime »

Sans faire cela, il est possible de forcer des couleurs d’arrière-plan spécifiques sur la plupart des clients de messagerie, les exceptions semblant être certains des anciens clients de messagerie de bureau Outlook. (Je suppose que le mode sombre n’est pas beaucoup utilisé sur les clients de bureau.)

Pour les clients de messagerie iOS (à l’exception de Gmail), Discourse le fait déjà si le paramètre apply custom styles to digest est activé. Le problème est qu’il code en dur la couleur d’arrière-plan et ne respecte pas la couleur “header background” du site :

La règle [dm='header'] pourrait être modifiée en :

"
[dm='header'] {
  background: ##{ColorScheme.hex_for_name('header_background')} !important;
}
"

Si cela avait du sens, une approche similaire pourrait être adoptée pour la section “Since your last visit” :

"
[dm='body_primary'] {
  background: #{SiteSetting.email_accent_bg_color} !important;
  color: #{SiteSetting.email_accent_fg_color} !important;
}
"

Notez que l’attribut dm pour les styles de mode sombre est ajouté à l’e-mail ici : discourse/lib/email/styles.rb at main · discourse/discourse · GitHub.

Quelque chose comme cela devrait fonctionner pour résoudre le problème sur les clients de messagerie iOS (à l’exception de Gmail).

Pour le client Gmail iOS, les couleurs d’arrière-plan peuvent être forcées en les définissant avec un dégradé linéaire. Il ne semble y avoir aucun effet secondaire indésirable à définir un arrière-plan en dégradé linéaire de cette manière pour tous les clients de messagerie. Il devrait donc être possible d’ajouter simplement une couleur d’arrière-plan en dégradé linéaire au CSS en ligne envoyé à tous les clients de messagerie.

Je soupçonne que la solution la plus simple pour gérer la section “Since your last visit” pour les clients de messagerie qui effectuent une inversion complète des couleurs serait de laisser les clients effectuer l’inversion, mais de s’assurer qu’il y a beaucoup de contraste entre les paramètres email accent accent bg color et email accent fg color :

Cela devrait empêcher des cas comme celui-ci (avec les valeurs par défaut de ces paramètres) :

1 « J'aime »

Le changement le plus simple que Discourse pourrait apporter maintenant pour augmenter la probabilité que les e-mails de résumé s’affichent correctement en mode sombre serait de ne pas activer par défaut le paramètre du site appliquer des styles personnalisés au résumé. (Notez que cela n’affectera que les clients de messagerie iOS.)

Un autre petit changement consisterait à mettre à jour la copie du paramètre du site logo du résumé pour encourager le téléchargement d’un logo qui a un contraste suffisant lorsqu’il est affiché sur un fond clair ou sombre. L’astuce courante pour les logos sombres est d’ajouter un contour blanc au logo.

Éventuellement, la page E-mails / Aperçu du résumé devrait afficher un avertissement indiquant que certains clients de messagerie effectueront une « inversion complète des couleurs » lorsque l’e-mail est consulté en mode sombre. Les propriétaires de sites pourraient être encouragés à tester leurs e-mails de résumé en mode sombre sur les clients de messagerie auxquels ils ont accès.

1 « J'aime »

Merci pour les détails !

En guise de solution de contournement rapide, j’ai ajouté ce CSS dans les paramètres des e-mails :

@media (prefers-color-scheme: dark) {
    body > div > table > tbody > tr > td > table[dm="header"] {
        background: #c89f4c !important;
    }
}

Cela rend l’arrière-plan de l’en-tête plus clair et mon logo s’affiche maintenant correctement (du moins en aperçu).