使用Google Webfonts时,Outlook中的CSS字体堆栈替换问题

时间:2013-08-24 21:36:05

标签: html css outlook html-email

在HTML电子邮件中使用Google Webfonts我在Outlook(2007,2010等)中遇到了在合并webfonts之前没有出现的字体替换问题。它忽略了字体堆栈并直接进入Times。

尽管使用内联后备字体堆栈,但仍会发生这种情况。

我注意到之前发布的类似问题,但仅作为一般性问题,与webfonts的使用无关。以前所有的字体回退都可以正常工作。我正在使用Litmus进行电子邮件测试。

有谁知道为什么会这样?

Litmus的链接:https://litmus.com/pub/53a33c7/screenshots

CSS中最初链接的字体如下:

<link href='http://fonts.googleapis.com/css?family=Arvo|Droid+Serif:400,700,400italic,700italic|Roboto:300' rel='stylesheet' type='text/css'>

在看到可能的solution in another answer后,我也尝试使用@ font-face和自托管文件,但它不起作用(我也更新了类名):

除了font-face尝试的解决方法:

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

@font-face {
    font-family: 'droid_serif';
    src: url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.eot');
    src: url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.eot?#iefix') format('embedded-opentype'),
         url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.svg#droid_serif') format('svg'),  
         url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.woff') format('woff'),
         url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.ttf') format('truetype');

    font-weight: normal;
    font-style: normal;

}
<!--<![endif]-->

Outlook特定的覆盖CSS似乎有效,但存在优先级问题。我不相信Outlook认可!重要声明所以我一直在努力寻找更具体的选择。但是,我仍然不明白为什么会发生这种情况,如果有更简单的解决办法。

Outlook字体覆盖摘录:

    <!--[if gte mso 9]>
    <style>
        /* Target Outlook 2007 and 2010 */

            h1 { font-family: 'Georgia',serif !important; font-weight:normal; }
            h1 a { font-family: 'Georgia',serif !important; font-weight:normal; }
            h2 { font-family: 'Trebuchet MS',arial, helvetica, sans-serif; font-weight:normal; }
            h3 { font-family: 'Trebuchet MS',arial, helvetica, sans-serif; }
            .cover,img.cover,a.cover {
                display: block;
                visibility: visible;

                td { font-family: 'Trebuchet MS',arial, helvetica, sans-serif; } 

                .droid { font-family: 'Georgia', serif; }
}
    </style>
    <![endif]-->

有问题的代码示例:

<td height="30" colspan="3" align="left" valign="middle" class="featured">
    <h2 style="text-align: left; padding: 0; margin: 0; color: #00799f; font-family: 'Roboto',arial, helvetica, sans-serif; font-size: 21px; font-weight: 100; background: none; border-bottom: 1px solid #b1d6e2; text-decoration: none; line-height: 36px; mso-line-height-rule: exactly;">cover story</h2>
</td>

更新:

我已经在答案中尝试了将webfont导入代码放在排除Outlook的条件标记内无效的建议。

<!--[if !mso]><!-- -->
@import url(http://www.example.css);
<!--<![endif]-->

<!--[if !mso]><!-- -->
@import url(http://fonts.googleapis.com/css?family=Oxygen);
<!--<![endif]-->

更新II(解决方案):

在所提供的所有帮助下,很明显一些看似微不足道的问题都可能导致这个问题。 font-face方法似乎比@import更可取。将webfont名称与本地字体不同可能会导致同样的问题,但这不是这封特定电子邮件发生的事情。

我早期尝试使用条件代码来隐藏Outlook <!--[if !mso]><!-->中的webfont导入代码。

问题是我在头部的CSS样式标签中做了这个。只需将此代码放在自己的样式标记中,如下所示就会产生差异。

我确认它正在工作,因为我能够删除用于检测Outlook 2007及更高版本的CSS代码的额外解决方法,以将h1,h2值恢复为标准字体堆栈。

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

7 个答案:

答案 0 :(得分:6)

  

更新:Here is a technique   在所有版本的文件中使用回退调用webfonts到字体堆栈   破坏的展望

如果不是Outlook,请尝试声明您的webfont。 webfont可能对Outlook有问题,因此根本不调用它可能有效。值得一试......

编辑:

当您的第一个声明的字体在引号中时,此问题有occured before与Outlook断开。这似乎是一个不可避免的Outlook bug /限制。

答案 1 :(得分:3)

要让Outlook使用您的字体堆栈,而不是使用Outlook选择添加的任何字体替换您的网络字体,请添加一个条件注释,只有Outlook才能读取它以分配您的字体堆栈备份字体。定义您的网络字体,但不要在条件注释中定义它,以便Outlook忽略网络字体,直接进行条件评论,只显示Arial。

<style>
        @import url('http://www.yourdomain.com/webfont.css');
</style>

    <!--[if gte mso 9]>
        <style>
            .webfontsubstitute { font-family: arial, sans-serif; }
        </style>
    <![endif]-->

</head>
<body>

    <a href="#" target="_blank" style="font-family:superwebfont,arial,sans-serif;">
    <span class="webfontsubstitute">WEB FONT STYLED TEXT HERE</span></a>

答案 2 :(得分:2)

我也遇到过这个问题,刚刚找到了一个简单的修复方法。导入Web字体后,可以使用 @media screen {} 来挑出支持媒体查询的客户端,这些客户端恰好是支持Web字体的客户端。因此,只需在此选择器内外指定 font-family 声明,即可隐藏电子邮件客户端(如Outlook)中的特定字体,以便显示下一个相应的后备字体,并显示您的Web字体很好地支持它的客户。

@import url(http://fonts.googleapis.com/css?family=Open+Sans:300);

.h1 { font-family: 'Arial', 'Helvetica', sans-serif }

@media screen {
    .h1 {
        font-family: Open Sans, 'Arial', 'Helvetica', sans-serif
    }
}

顺便说一下, @import Campaign Monitor suggests在电子邮件中优于 @ font-face

答案 3 :(得分:1)

我记得有一段时间有类似的问题。最后我认为导致问题的是@import,我不得不使用不同的方法来提取字体。

而不是@import使用@font-face方法。

@font-face {
  font-family: 'Oxygen';
  font-style: normal;
  font-weight: 400;
  src: local('Oxygen'), local('Oxygen-Regular'),     url(http://themes.googleusercontent.com/static/fonts/oxygen/v2/eAWT4YudG0otf3rlsJD6zOvvDin1pK8aKteLpeZ5c0A.woff) format('woff');
}

然后像往常一样使用字体:

h1 {
  font-family: 'Oxygen', sans-serif;
}

答案 4 :(得分:1)

问题可能是因为您的用户在本地安装了字体版本并且存在冲突。

尝试@ font-face导入(这是Google WebFonts无论如何都可以工作的方式),只需将font-family重命名为不同的东西。

E.g。

@font-face {
    font-family: 'droid_serif';

为:

@font-face {
    font-family: 'droid_serif_alt';

请务必反映标记其余部分的变化!

答案 5 :(得分:0)

这个CSS在哪里?它会不再出现在标题中了?

答案 6 :(得分:0)

您必须使用“ mso-font-alt ”进行字体回退(Outlook 2010,2013,2016):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>

    ....

    <style type="text/css">

    @font-face {
        font-family: 'droid_serif';
        src: url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.eot');
        src: url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.eot?#iefix') format('embedded-opentype'),
         url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.svg#droid_serif') format('svg'),  
         url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.woff') format('woff'),
         url('http://www.suissamesser.com/emails/rsdsa/DroidSerif-webfont.ttf') format('truetype');

        font-weight: normal;
        font-style: normal;
        mso-font-alt: 'Arial';
    }

    ...

    </style>
</head>

覆盖自定义css声明的另一个技巧:

<!--[if mso]>
    <style> 
      body,table tr,table td,table th,a,span,table.MsoNormalTable { 
        font-family: 'Arial', 'Helvetica', 'sans-serif' !important;  
      }
      .custom-headline{
          font-family: 'Times New Roman', 'serif' !important;
      }
    </style>
<![endif]-->

请同时查看:https://litmus.com/community/code/36-outlook-and-fallback-fonts