这本应是一篇带有几张图片和一个易于应用的解决方案的简短帖子。结果却失控了。HTML 电子邮件很难。为了好玩,这里有一个它可能出错的方式: Gmail's dark mode · Issue #68 · hteumeuleu/email-bugs · GitHub ![]()
请随意浏览这篇帖子并查看图片。在帖子结尾,我差不多得出了结论,由于暗模式的流行,可能值得重新设计摘要电子邮件,而不是试图在其当前代码上打补丁。这不由我决定,也许我只是看了太久了。
关于摘要电子邮件在设置为暗模式的电子邮件客户端上的呈现方式,最近有一些常见问题。主要问题是,在通过完全反转颜色来处理暗模式的电子邮件客户端(Gmail 应用(iOS)、Outlook 2021(Windows)、Office 365(Windows)和 Windows Mail)上,摘要头的背景颜色会被反转。这会在标题颜色和站点徽标之间产生对比度问题。
这些电子邮件客户端在按钮的文本颜色和摘要的“自上次访问以来”部分也存在问题。
下面的所有图片均来自 Litmus 电子邮件测试服务:
来自具有暗色方案的 Discourse 站点,使用带有透明背景的白色 PNG 徽标:
预期(Gmail 应用暗模式 for Android):
不佳(Gmail 暗模式 for iOS、OL Office 365 暗模式、Outlook 2021 暗模式、Windows 10 Mail 暗模式):
移动客户端概览(Gmail for iOS 是唯一在标题颜色方面明显存在问题的客户端):
这是对 Meta 摘要电子邮件(默认浅色方案,透明背景上的暗 PNG 徽标)进行的相同测试。请注意,Meta 没有启用“为摘要应用自定义样式”站点设置,因此它没有为支持它们的客户端(Apple Mail 和较新版本的 iOS Mail)获取暗模式元标签和样式。如果启用了“为摘要应用自定义样式”设置,我怀疑 iPhone 暗模式测试在徽标/背景颜色对比度方面也会有问题。
有几种方法可以强制电子邮件标题背景颜色与站点默认颜色方案的颜色匹配:
对于 iOS 版 Gmail 应用,可以通过使用 linear-gradient 创建的背景图像来设置标题背景颜色。以这种方式创建的背景图像不会反转颜色。诀窍是将两个 linear-gradient 颜色设置为 Discourse 站点默认颜色方案的“标题背景”颜色的值。
现在可以通过将自定义 CSS 添加到“管理 / 自定义 / 电子邮件样式 / CSS”选项卡来完成此操作。将颜色值设置为默认颜色方案的“标题背景”颜色的值。(注意,在电子邮件 CSS 编辑器中无法使用 var(--header_background) 来设置颜色):
.digest-header {
background-image: linear-gradient(#111, #111);
}
测试了这种方法用于 Meta 摘要电子邮件,我开始对其作为具有浅色默认颜色方案的站点的解决方案表示怀疑。徽标清晰可辨,但这看起来有点奇怪吗?
对于 Outlook 2021 暗模式和 Windows 10 Mail 暗模式桌面电子邮件客户端,可以通过向为 .digest-header 设置的 background-color 添加 !important 规则来修复标题背景颜色反转的问题。这_无法_通过自定义 CSS 来实现,因为 Discourse 已经在元素上添加了一个没有 !important 规则的 background-color 样式。该规则在自定义 CSS 之后添加,因此具有优先权。(注意,此方法似乎仅适用于强制背景颜色为深色。当我尝试使用它强制标题背景为 #ffffff 时会失败。)
对于执行完全颜色反转的电子邮件客户端,“自上次访问以来”部分中的文本颜色问题似乎没有简单的解决方案。这里有一个 iOS Gmail 的技巧:https://www.hteumeuleu.com/2021/fixing-gmail-dark-mode-css-blend-modes/。它利用混合模式来欺骗 Gmail 设置白色文本颜色。理论上可行,但考虑到摘要电子邮件标记的复杂性,我认为不值得追求。
总而言之,我认为对于默认颜色方案为_暗色_方案的 Discourse 站点,目前的最佳解决方案是将其添加到“电子邮件样式 / CSS”选项卡中。这将使站点徽标在 iOS Gmail 暗模式应用上清晰可见。添加它没有在其他我测试过的电子邮件客户端中引起任何问题。对于默认_浅色_方案的站点,我对该方法不太确定。在整个深色屏幕上强制显示白色标题背景看起来不太好。
摘要电子邮件是在暗模式尚未普及之前开发的。也许由于暗模式近期的流行,重新设计摘要电子邮件以使其在流行电子邮件客户端的暗模式和浅模式下都能良好显示是有意义的。
如果完全重新设计摘要电子邮件超出范围,可能值得考虑提供 dark_mode_digest_logo 和 light_mode_digest_logo 设置。在至少一些电子邮件客户端上,将可以检测到模式并显示相应的徽标。
为了改善 Outlook 桌面客户端上的暗模式,Discourse 可以在电子邮件的 HTML 中保留一些类名,而不是全部删除。这些类名可用于定位 Outlook 上的暗模式:https://litmus.com/community/discussions/8256-outlook-app-vs-dark-mode-on-ios-a-disaster#comment-16402。(注意,Outlook 无法处理元素上的多个类名,因此仍需要从 digest.html.erb 文件中删除一些类名。)











