【问题标题】:HTML Emails: fallback for mso conditional?HTML 电子邮件:mso 条件的后备?
【发布时间】:2013-08-17 18:17:14
【问题描述】:

如果你像我一样,读完这篇文章你的眼睛会抽搐。我不怪你。

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

  1. 使用尽可能少的图片
  2. 尽可能多地使用“启用 css 的精美功能”。大多数情况下,这只意味着盒子上的圆角。

这个问题专门关于执行圆角。 Gmail 和 Apple 支持 CSS 圆角,Outlook 需要矢量图形。对于其余平台,它们可以使用方形边缘。

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

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

即使回到 Outlook 2000 也能像魅力一样工作。问题是,我不知道如何创建回退。直觉是这样说的:

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

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

【问题讨论】:

  • 我的方法是使用 Outlook 的圆角图像,然后使用针对像素比 @media screen 和 (-webkit-device-pixel-ratio)、screen 和(-moz-device-pixel-ratio){ - 然后使用 CSS(3) 恢复 - VML 很好,但重用代码、对代码进行 QA 并大致了解发生了什么是有风险且更困难的。

标签: outlook gmail html-email vector-graphics


【解决方案1】:

费了好大劲才找到解决办法。而不是这个:

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

这很好用:

<!--[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 中,并改为部署矢量解决方案。

希望这对未来的人有所帮助!

【讨论】:

  • 赞成,因为我今天正在尝试这个。希望它有效。
  • 很高兴听到这个消息!乐于助人 =)
  • 谢谢!确实是脑残;)
  • 无论出于何种原因,这对我来说都不起作用,但我还是赞成,因为它是一个非常有创意的解决方案。
【解决方案2】:

这也可以,不需要隐藏的 div。

 <!--[if mso]>
     Outlook content
 <![endif]-->
 <!--[if !mso]> <!---->
     Non-outlook content
 <!-- <![endif]-->

诀窍是在第 4 行关闭评论之前重新打开评论 -

<!---->

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

【讨论】:

  • 我倾向于说这行得通,而另一个不行。我已经使用了上面建议的 sn-p 而没有 并且仍然使代码不显示。你的做到了。谢谢!!
【解决方案3】:

虽然 CodeMoose 的解决方案确实隐藏了回退;在我的测试中,它为后备 的位置留出了空间(我读到 Outlook 不会呈现溢出:隐藏)。这对我的布局不起作用,因为它会影响其他元素。

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

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

<[fallback goes here] style="mso-hide:all;">

通过添加“mso-hide:all;”根据您的回退的实际样式,Outlook 将折叠并忽略您的回退代码,从而保留您的布局。在可以处理您使用 VML 尝试复制的复杂 CSS 的客户端(例如 Outlook for Mac 中)中,您的回退仍然可以正常显示。

【讨论】:

  • 感谢您的反馈!如果您仔细阅读我的答案,您会看到 mso-hide: all; 位于 div 样式标签的末尾 - 这是否仍然为您创造了额外的空白?我想知道它是否从父级继承样式,例如行高。
  • 令人惊奇的是,Outlook 不只是执行标准 CSS。 /用头撞墙
  • @EllenB Microsoft,而不是 Outlook。
【解决方案4】:

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

<!--[if !mso]><!-->
    <style type="text/css">    
        @font-face {
            font-family: 'Museo100';
            src: url('http://www.somesite.nl/site/fonts/museo100-regular-webfont.eot');
            src: url('http://www.somesite.nl/site/fonts/museo100-regular-webfont.eot?#iefix') format('embedded-opentype'),
                 url('http://www.somesite.nl/site/fonts/museo100-regular-webfont.woff') format('woff'),
                 url('http://www.somesite.nl/site/fonts/museo100-regular-webfont.ttf') format('truetype'),
                 url('http://www.somesite.nl/site/fonts/museo100-regular-webfont.svg#museo100') format('svg');
            font-weight: normal;
            font-style: normal;
        }
<!--<![endif]-->

首先,我尝试将“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。

【讨论】:

  • 这并没有说明某些版本的 Outlook 实际上会显示 webfont。你试过this吗?注意&lt;!--[if (!mso 14)&amp;(!mso 15)]&gt; 更具体
  • 感谢您的提示!没试过,因为我手头没有 Outlook '00 和 '11。
猜你喜欢
  • 1970-01-01
  • 2014-03-12
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2013-08-03
  • 2021-06-30
  • 2014-06-06
相关资源
最近更新 更多