Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to prevent iOS 13 Dark Mode from breaking emails

We have an e-commerce app that sends out order details when a purchase is made, and we just redesigned that email template. We've received reports over the past few days of some customers having half the text in the email missing.

After finally getting a screenshot, we've learned that the issue is happening on iPhones using dark mode. So far they've all been customers using gmail with either the Mail app or with Safari (both have the same problem). I'm not sure if the gmail factor is relevant or a coincidence.

Our email is simple -- it has a white background, gray headings, and black body text. Dark mode is leaving the white background and gray headings untouched, but the body text is being changed from black to white. On the white background, the white text is obviously invisible, and the email looks like it's missing large amounts of content.

Is there anything that can be done to prevent dark mode from changing our text from black to white?

I should note that we also have a QR code embedded in the email, so I'm concerned about solutions that would allow dark mode to proceed in recoloring our full email, as I believe it would make it harder for the QR code to be recognized.

Edit: this is not related to any app code, so guidelines on developing iOS for dark mode don't apply. This is simply an issue of how Apple's Mail app on iOS 13 in dark mode is displaying an HTML email.

like image 903
jessica Avatar asked Oct 01 '19 03:10

jessica


People also ask

How do I make my email adapt to dark mode?

In the web version of Gmail, you can choose a black background as a theme. Open Quick Settings > Theme > View All > Dark. The background will turn black, and the text will turn white and light gray, but only in the Gmail interface. Emails won't be adapted.

Can you override dark mode in email?

Target Dark Mode users. If you feel comfortable digging into the CSS of your email, then adding in your own Dark Mode overrides will help you control how your email is viewed. Well, mostly. The Gmail App (iOS and Android) as well as Outlook 2019 (Windows) will ignore these styles.

How does dark mode affect emails?

No color changes Some email clients let you change their UI to Dark Mode, but that doesn't have any impact on how your HTML email is rendered. Whether the app is set to Light or Dark Mode, your email will look exactly the same.

Why are some emails white in dark mode?

Text Emails In dark mode, the regular text emails and rich text emails are shown in dark mode by default. In fact, even when you include an image, the text appears in a light color on a dark background. Apple mail has a tendency to adjust font colors. This, in turn, transforms the white text into black and vice versa.


2 Answers

You can forcibly remove this on Apple devices, but now we have Gmail and Outlook on Mac without a way to stop them.

Simply put this in the <head>:

<meta name="color-scheme" content="only">

"Only" is short for "Light only" (which also still works)

That will fix for iPhone dark mode and Apple Mail but not Outlook on Mac or Gmail.

You can currently override Outlook on Mac, but there is no known hack for Gmail.

Here is how to override for Outlook on Mac:

<style type="text/css">
.body, .darkmode, .darkmode div { /* With class body on the body tag, and all elements represented here that have a background color */
    background-image: linear-gradient(#ffffff,#ffffff) !important;
}
.darkmode p { /* Add other selectors for other text elements */
    -webkit-text-fill-color: #000000 !important;
}
</style>

HT to Brian Thies on Litmus forum for this


But it's best to try and fix the root problem, rather than remove a functionality (dark mode) that your customers want.

Apple have provided such a way, with this in the <head>:

<meta name="color-scheme" content="light dark">
<style type="text/css">
@media (prefers-color-scheme: dark) {
        .darkmode { background-color: #1e1e1e !important; }
        .darkmode p { color: #ffffff !important; }
}
</style>

Also, ensure your outermost element with the background-color has the class "darkmode", e.g.

 <table width="100%" cellpadding="0" cellspacing="0" border="0">
        <tr>
            <td align="center" class="darkmode" bgcolor="#ffffff" valign="top" style="padding: 0px 15px;">

So by default, you'll have white background, black text; and on dark mode it will be a dark background with light text.

(Please supply the code for any further queries.)

like image 134
Nathan Avatar answered Oct 16 '22 19:10

Nathan


Thanks to the link provided by @FrankSchlegel

https://webkit.org/blog/8840/dark-mode-support-in-webkit/

using color-scheme: light only in the css on all elements was the answer. Thank you!

like image 23
jessica Avatar answered Oct 16 '22 21:10

jessica