HTML 电子邮件:mso 条件的后备?

问题描述 投票:0回答:4

2023 年更新:这个问题最初是在 2013 年提出的 - 当时的情况和支持的技术发生了很大的变化。公认的答案对于传统客户来说是实用且有效的,但“弗兰克·哈根森的答案”最有可能适用于现代客户群。请相应选择。

如果您像我一样,读完本文时您的眼睛会抽搐。我不怪你。

我们的客户要求我们开发一个响应式 HTML 电子邮件模板,有两个规范:

使用尽可能少的图像
  1. 尽可能多地使用“支持 CSS 的精美功能”。大多数情况下,这仅意味着盒子上的圆角。
  2. 这个问题具体是关于执行圆角的。 Gmail 和 Apple 支持 CSS 圆角,而 Outlook 需要矢量图形。对于其余平台,他们可以使用方形边缘。

以下是我们检测和执行 Outlook 的方式:

<!--[if mso]><v:shape>...</v:shape><![endif]-->

工作起来就像一个魅力,甚至回到 Outlook 2000。问题是,我不知道如何创建后备。直觉是这样说的:

<!--[if !mso]>...<![endif]-->

但它只是被大多数其他电子邮件客户端作为评论完全忽略,然后盒子里的角落就完全消失了。我问你们,SO 社区的优秀成员:是否可以为所有平台(除了 MSO)部署标记?也许有一种我没有考虑过的更聪明的方法来实现这一点?或者电子邮件 HTML 仍然太石器时代而无法尝试这样的事情吗?

经过一番绞尽脑汁找到了解决方案。而不是这个:

outlook gmail html-email vector-graphics
4个回答
63
投票

这个效果非常好:

<!--[if mso]>
    <v:shape>...</v:shape>
    <div style="width:0px; height:0px; overflow:hidden; display:none; visibility:hidden; mso-hide:all;">
<![endif]-->

    [fallback goes here]

<!--[if mso]></div><![endif]-->

它所做的只是将后备包装在 MSO 中不可见的 div 中,并部署矢量解决方案。

希望这对将来的人有帮助!

这也有效,不需要隐藏的 div。


57
投票

技巧是在第四行关闭评论之前重新打开评论 -

<!---->

一点。如果您不这样做,IE 会在非 Outlook 内容之前呈现“-->”。其他浏览器没有这个问题。


虽然CodeMoose的解决方案确实隐藏了后备;在我的测试中,它为后备


16
投票

经过大量搜索,我发现如果您对 CodeMoose 的建议进行小修改,它将隐藏您的后备并且不会添加任何不必要的间距

<!--[if mso]> <v:shape>...</v:shape> <![endif]--> <[fallback goes here] style="mso-hide:all;"> 添加“mso-hide:all;”根据您的后备的实际样式,Outlook 将折叠并忽略您的后备代码,从而保留您的布局。您的回退仍然可以在能够处理您使用 VML 尝试复制的复杂 CSS 的客户端中正常显示,例如在 Outlook for Mac 中。


在使用带有 @font-face 声明的自定义字体时,Outlook 回退到 Times New Roman 时遇到了一些麻烦。我不仅必须使用围绕其自身样式块的条件从 Outlook 中隐藏 @font-face 声明。 (所有其他样式都放在另一个块中)。我还必须使用条件标签将文本内容双重包装在跨度中。只是举一个例子,说明@CodeMoose(上面)发布的这项技术在使用自定义字体时如何工作。


7
投票

首先,我尝试将条件放在内联样式中的“Museo300”字体声明周围,但这显然不起作用,所以我必须将我的内容双重包装到带有样式声明的两个跨度中。里面的一个是非 MSO 有条件的。

<span style="color: #00B2EB; font-family: arial, sans-serif; font-size: 14px; line-height: 19px; font-weight: normal;">
    <!--[if !mso]><!--><span style="font-family: Museo100;"><!--<![endif]-->
    Text goes here, shown in Museo in Apple mail while this method shows in Arial in Outlook (and others that do not support custom fonts  
    <!--[if !mso]><!--></span><!--<![endif]-->
</span> 

这非常适合让 Outlook 以 Arial 格式显示文本,而 Apple 邮件将以 Museo 字体显示文本。其他客户端(例如 Android 上的邮件)具有正常的回退行为,仅显示 Arial。

© www.soinside.com 2019 - 2024. All rights reserved.