2023 年更新:这个问题最初是在 2013 年提出的 - 当时的情况和支持的技术发生了很大的变化。公认的答案对于传统客户来说是实用且有效的,但“弗兰克·哈根森的答案”最有可能适用于现代客户群。请相应选择。
如果您像我一样,读完本文时您的眼睛会抽搐。我不怪你。我们的客户要求我们开发一个响应式 HTML 电子邮件模板,有两个规范:
使用尽可能少的图像
以下是我们检测和执行 Outlook 的方式:
<!--[if mso]><v:shape>...</v:shape><![endif]-->
工作起来就像一个魅力,甚至回到 Outlook 2000。问题是,我不知道如何创建后备。直觉是这样说的:
<!--[if !mso]>...<![endif]-->
但它只是被大多数其他电子邮件客户端作为评论完全忽略,然后盒子里的角落就完全消失了。我问你们,SO 社区的优秀成员:是否可以为所有平台(除了 MSO)部署标记?也许有一种我没有考虑过的更聪明的方法来实现这一点?或者电子邮件 HTML 仍然太石器时代而无法尝试这样的事情吗?
经过一番绞尽脑汁找到了解决方案。而不是这个:
这个效果非常好:
<!--[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。
技巧是在第四行关闭评论之前重新打开评论 -
<!---->
一点。如果您不这样做,IE 会在非 Outlook 内容之前呈现“-->”。其他浏览器没有这个问题。
虽然CodeMoose的解决方案确实隐藏了后备;在我的测试中,它为后备
将经过大量搜索,我发现如果您对 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(上面)发布的这项技术在使用自定义字体时如何工作。
首先,我尝试将条件放在内联样式中的“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。