Indagine sui problemi della dark mode per le email di riepilogo attività

Questo doveva essere un breve post con alcune immagini e una soluzione facilmente applicabile. È sfuggito di mano. Le email HTML sono difficili. Per divertimento, ecco come può andare storto: Gmail's dark mode · Issue #68 · hteumeuleu/email-bugs · GitHub :slight_smile:

Sentiti libero di scorrere questo post e guardare le immagini. Alla fine del post ero giunto più o meno alla conclusione che, data la popolarità della modalità scura, potrebbe valere la pena rielaborare l’email digest, invece di cercare di applicare soluzioni al suo codice attuale. Non dipende da me, e forse l’ho guardata troppo a lungo.


Ci sono state alcune domande recenti su come vengono renderizzate le email digest sui client di posta elettronica impostati sulla modalità scura. Il problema principale è che il colore di sfondo dell’intestazione del digest viene invertito sui client di posta elettronica che gestiscono la modalità scura eseguendo un’inversione completa dei colori (app Gmail (iOS), Outlook 2021 (Windows), Office 365 (Windows) e Windows Mail). Ciò crea un problema di contrasto tra il colore dell’intestazione e il logo del sito.

Questi client di posta elettronica hanno anche problemi con il colore del testo nei pulsanti e nella sezione “Dalla tua ultima visita” del digest.

Tutte le immagini seguenti provengono dal servizio di test email Litmus:

Da un sito Discourse con uno schema di colori scuro, utilizzando un logo PNG bianco con sfondo trasparente:

Atteso (Gmail App Dark per Android):

Scadente (Gmail Dark per iOS, OL Office 365 Dark, Outlook 2021 Dark, Windows 10 Mail Dark):

Panoramica dei client mobili (Gmail per iOS è l’unico client con problemi evidenti con il colore dell’intestazione):

Ecco lo stesso test con l’email digest di Meta (schema di colori chiari predefinito, logo PNG scuro su sfondo trasparente). Si noti che Meta non ha abilitata l’impostazione del sito apply custom styles to digest, quindi non riceve i metatag e gli stili della modalità scura per i client che li supportano (Apple Mail e versioni recenti di iOS Mail). Se l’impostazione apply custom styles to digest fosse abilitata, sospetto che anche i test su iPhone Dark avrebbero problemi di contrasto tra logo e colore di sfondo.

Ci sono un paio di modi in cui il colore di sfondo dell’intestazione dell’email può essere forzato a corrispondere al colore dello schema di colori predefinito del sito:

Per l’app Gmail per iOS, il colore di sfondo dell’intestazione può essere impostato con un’immagine di sfondo creata con un linear-gradient. Le immagini di sfondo create in questo modo non vedono il loro colore invertito. Il trucco è impostare entrambi i colori del linear-gradient sul valore del colore “header background” dello schema di colori predefinito del sito Discourse.

Ciò può essere realizzato ora aggiungendo CSS personalizzato nella scheda Admin / Customize / Email Style / CSS. Impostare i valori dei colori sul valore del colore “header background” dello schema di colori predefinito. (Nota, non è possibile utilizzare var(--header_background) per impostare il colore nell’editor CSS dell’email):

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

Testando questo approccio per l’email digest di Meta, sto iniziando ad avere qualche dubbio sulla sua efficacia come soluzione per i siti che hanno uno schema di colori predefinito chiaro. Il logo è leggibile, ma questo sembra un po’ strano?

Per i client di posta elettronica desktop Outlook 2021 Dark e Windows 10 Mail Dark, il problema dell’inversione del colore di sfondo dell’intestazione può essere risolto aggiungendo una regola !important al background-color impostato per .digest-header. Questo non può essere realizzato tramite CSS personalizzato perché Discourse sta già aggiungendo uno stile background-color all’elemento senza la regola !important. Quella regola viene aggiunta dopo il CSS personalizzato, quindi ha la precedenza. (Nota, questo approccio sembra funzionare solo per forzare il colore di sfondo a un colore scuro. Fallisce quando provo a usarlo per forzare lo sfondo dell’intestazione a #ffffff.)

Il problema del colore del testo nella sezione “Dalla tua ultima visita” per i client di posta elettronica che eseguono un’inversione completa dei colori non sembra avere una soluzione facile. C’è un hack per Gmail su iOS suggerito qui: Fixing Gmail’s dark mode issues with CSS Blend Modes — HTeuMeuLeu.com. Utilizza le modalità di fusione per ingannare Gmail nell’impostare un colore del testo bianco. Funziona in teoria, ma data la complessità del markup dell’email digest, non penso che valga la pena perseguirlo.

Riassumendo, penso che per i siti Discourse che hanno uno schema di colori scuro come schema di colori predefinito, una buona soluzione per ora sarebbe aggiungere il CSS che ho postato sopra alla loro scheda Email Style / CSS. Questo renderà il logo del sito leggibile sull’app Gmail Dark per iOS. Aggiungerlo non ha causato problemi con altri client di posta elettronica che ho testato. Per i siti che hanno uno schema di colori chiaro predefinito, sono meno sicuro di questo approccio. Forzare uno sfondo dell’intestazione bianco su uno schermo altrimenti scuro non ha un bell’aspetto.

L’email digest è stata sviluppata prima che la modalità scura fosse comunemente utilizzata. Forse, data la recente popolarità della modalità scura, avrebbe senso rielaborare l’email digest con l’obiettivo di farla visualizzare bene sia in modalità scura che chiara sui client di posta elettronica più diffusi.

Se la rielaborazione completa dell’email digest è fuori ambito, potrebbe valere la pena considerare la fornitura di impostazioni dark_mode_digest_logo e light_mode_digest_logo. Su almeno alcuni client di posta elettronica, sarà possibile rilevare la modalità e visualizzare il logo appropriato.

Per migliorare la modalità scura sui client desktop Outlook, Discourse potrebbe lasciare alcuni nomi di classe nell’HTML dell’email invece di rimuoverli tutti. Questi nomi di classe potrebbero essere utilizzati per indirizzare la modalità scura su Outlook: https://litmus.com/community/discussions/8256-outlook-app-vs-dark-mode-on-ios-a-disaster#comment-16402. (Nota, Outlook non può gestire più nomi di classe su un elemento, quindi alcuni nomi di classe dovrebbero comunque essere rimossi dal file digest.html.erb.)

7 Mi Piace

Mi sono reso conto che potrei non aver esposto il problema più ovvio in modo sufficientemente chiaro. L’impostazione del sito apply custom styles to digest (applica stili personalizzati al digest) è abilitata per impostazione predefinita. Tale impostazione viene utilizzata per aggiungere meta tag e regole CSS che fanno sì che i client di posta elettronica iOS visualizzino le email in modalità scura se l’utente ha abilitato la modalità scura sul dispositivo.

A meno che non si presti particolare attenzione nell’caricare un logo per il digest che abbia un contrasto sufficiente sia su sfondi chiari che scuri, le email di digest dai siti che hanno un logo ottimizzato per sfondi chiari, visualizzate in modalità scura sui client di posta elettronica più diffusi, appariranno simili a questa:

Disabilitare l’impostazione del sito apply custom styles to digest produrrà in realtà risultati migliori. Con tale impostazione disabilitata, gli stili della modalità scura non verranno applicati alle app di posta elettronica iOS. Verranno comunque applicati ai client di posta elettronica Android e all’app Gmail per iOS.

Forse l’attuale best practice dovrebbe essere quella di provare a caricare un logo nell’impostazione del sito digest logo che venga visualizzato bene sia su sfondi chiari che scuri. Se ciò non fosse possibile, i siti Discourse con uno schema di colori predefinito chiaro dovrebbero disabilitare l’impostazione del sito apply custom styles to digest. I siti Discourse con uno schema di colori predefinito scuro dovrebbero mantenere l’impostazione abilitata. Non prendere il consiglio sull’impostazione del sito apply custom styles to digest come definitivo per ora, ma sulla base di alcuni test, sembra essere l’approccio corretto.

Ciò funzionerebbe solo per i client di posta elettronica che supportano @media (prefers-color-scheme): Can I email… @media (prefers-color-scheme). Ci sarebbe il rischio di far apparire entrambe le versioni del logo su altri client di posta elettronica.

5 Mi Piace

Grazie per questo lavoro approfondito Simon :+1: :exploding_head:

Questo è terribile. Lo sperimento sul mio smartphone e non capisco nemmeno come l’inversione forzata dei colori indipendentemente dal contenuto sia stata vista come una buona idea.

3 Mi Piace

Mi chiedo se una possibile soluzione potrebbe essere che invece di usare il logo, creiamo un’immagine in formato rettangolare usando il logo del sito e il colore di sfondo dell’intestazione che il sito utilizza attualmente.

Dovremmo farlo sul backend, ma l’uso di un blocco immagine con il colore incluso come sfondo impedirebbe a Gmail di invertire il colore dello sfondo.

Per quello che vale, ho testato diverse email di grandi marchi nella mia app Gmail mentre era impostata sulla modalità scura, e la maggior parte di esse non ha risolto nemmeno questo problema.

2 Mi Piace

Senza fare ciò, è possibile forzare colori di sfondo specifici sulla maggior parte dei client di posta elettronica, le eccezioni sembrano essere alcuni dei vecchi client di posta elettronica desktop di Outlook. (Suppongo che la modalità scura non venga utilizzata molto sui client desktop.)

Per i client di posta elettronica iOS (escluso Gmail), Discourse lo sta già facendo se l’impostazione apply custom styles to digest è abilitata. Il problema è che sta codificando in modo fisso il colore di sfondo e non rispetta il colore “header background” del sito:

La regola [dm='header'] potrebbe essere modificata in:

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

Se avesse senso, un approccio simile potrebbe essere adottato per la sezione “Since your last visit”:

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

Si noti che l’attributo dm per gli stili della modalità scura viene aggiunto all’email qui: discourse/lib/email/styles.rb at main · discourse/discourse · GitHub.

Qualcosa del genere dovrebbe funzionare per risolvere il problema sui client di posta elettronica iOS (escluso Gmail).

Per il client Gmail di iOS, i colori di sfondo possono essere forzati impostandoli con una sfumatura lineare. Non sembrano esserci effetti collaterali indesiderati nell’impostare un colore di sfondo sfumato lineare in questo modo per tutti i client di posta elettronica. Quindi dovrebbe andare bene aggiungere semplicemente un colore di sfondo sfumato lineare all’CSS inline inviato a tutti i client di posta elettronica.

Il mio sospetto è che la soluzione più semplice per gestire la sezione “Since your last visit” per i client di posta elettronica che eseguono un’inversione completa dei colori sia semplicemente lasciare che i client eseguano l’inversione, ma assicurarsi che ci sia un buon contrasto tra le impostazioni email accent accent bg color e email accent fg color:

Ciò dovrebbe prevenire casi come questo (con i valori predefiniti di tali impostazioni):

1 Mi Piace

La modifica più semplice che Discourse potrebbe apportare ora per aumentare la probabilità che le email di riepilogo vengano visualizzate correttamente in modalità scura sarebbe quella di non abilitare l’impostazione del sito apply custom styles to digest per impostazione predefinita. (Nota: ciò influenzerà solo i client di posta elettronica iOS).

Un’altra piccola modifica sarebbe aggiornare il testo dell’impostazione del sito digest logo per incoraggiare il caricamento di un logo che abbia un contrasto sufficiente se visualizzato su uno sfondo chiaro o scuro. Il trucco principale per i loghi scuri è aggiungere un contorno bianco al logo.

Possibilmente, la pagina Emails / Preview summary dovrebbe fornire un avviso che alcuni client di posta elettronica eseguiranno un “inverti colore completo” quando l’email viene visualizzata in modalità scura. I proprietari del sito potrebbero essere incoraggiati a testare le loro email di riepilogo in modalità scura sui client di posta elettronica a loro disposizione.

1 Mi Piace

Grazie per i dettagli!

Come soluzione rapida, ho aggiunto questo CSS nelle impostazioni delle email:

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

Questo rende lo sfondo dell’intestazione più chiaro e il mio logo viene ora visualizzato correttamente (almeno in anteprima).