【问题标题】:Webfonts used within font fallback in IE8IE8 字体回退中使用的 Webfonts
【发布时间】:2011-07-07 10:52:37
【问题描述】:

我目前正在尝试在我构建的网站上实现 webfonts,我想将它用作 font-family 属性中的后备,即如果字符未在 Arial / Helvetica 中表示,那么它应该在 webfont 中用过。

我知道这在 IE6 和 7 中不起作用,但希望它在 IE8 中起作用,但似乎也不行。

我只是想知道是否有人遇到过这个问题,以及是否可以在 IE8 中使用 webfont 作为备用字体,或者是否有人可以看到我只是在代码中做错了什么。

提前感谢您的帮助

这是我的css代码:

@font-face {
    font-family: 'stix';
    src: url('/webfonts/webfont.eot');
    src: local('☺'), url('/webfonts/webfont.woff') format('woff'), url('/webfonts/webfont.ttf') format('truetype'), url('/webfonts/webfont.svg#webfont3hGwcDt1') format('svg');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'stix';
    src: url('/webfonts/bold-webfont.eot');
    src: local('☺'), url('/webfonts/bold-webfont.woff') format('woff'), url('/webfonts/bold-webfont.ttf') format('truetype'), url('/webfonts/bold-webfont.svg#webfontJse4ZhT8') format('svg');
    font-weight: bold;
    font-style: normal;
}

@font-face {
    font-family: 'stix';
    src: url('/webfonts/talic-webfont.eot');
    src: local('☺'), url('/webfonts/italic-webfont.woff') format('woff'), url('/webfonts/italic-webfont.ttf') format('truetype'), url('/webfonts/italic-webfont.svg#webfonthDLBqRGk') format('svg');
    font-weight: normal;
    font-style: italic;
}

@font-face {
    font-family: 'stix';
    src: url('/webfonts/bold_italic-webfont.eot');
    src: local('☺'), url('/webfonts/bold_italic-webfont.woff') format('woff'), url('/webfonts/bold_italic-webfont.ttf') format('truetype'), url('/webfonts/bold_italic-webfont.svg#webfontnuMlJc7x') format('svg');
    font-weight: bold;
    font-style: italic;

}

body { font-family: arial, helvetica, clean, stix, sans-serif}
body.ie6 #content, body.ie6 .popup { font: 15px/1.6em stix; }

【问题讨论】:

  • 错字,可能会有所不同:/webfonts/talic-webfont.eot -> /webfonts/italic-webfont.eot

标签: css internet-explorer fonts font-face font-family


【解决方案1】:

使用 STIX 作为后备有什么好处?

如果是为了防止 UA 下载字体,除非它是需要的,那么你就不走运了,目前只有 webkit 有这种行为 https://gist.github.com/478344 更糟糕的是,IE 会下载所有在 @font-face 中定义的字体,即使它们' 在 CSS 中的其他任何地方都没有引用。

如果是因为 STIX 没有常规字符,是的,IE 会把你搞砸的。我建议将 STIX 与免费字体合并,以创建一个包含您需要的所有字符的可交付成果。

【讨论】:

  • 理想情况下,STIX 的使用应限制在较小的 或其他范围内。一些 JS 可以查看它并在非数学 unicode 范围内对字符进行 arial-ize。此代码仅在 IE 中需要,并且该跨度的后备将是所有 STIX。
  • 另一个建议...尝试将 arial 作为后备,而不是 STIX。从 STIX 中删除常规字符并查看 IE 是否回退到默认值。我很确定 IE8 会退回到网络字体(我以为只有 IE6 没有)
【解决方案2】:

我正在使用您的代码的精简版本(只是为了清楚起见 - 它没有任何问题)并在许多浏览器中进行测试(网络字体是 STIX,就像您一样,我不知道如果这起作用),并且我看到了一些奇怪的行为:大多数浏览器中的字体回退确实有效,但仅当 排除所有斜体字体变体时(可能是它们斜体或粗体)。

即这有效(100% 的时间),对于那些不在 arial 中的字符,浏览器会退回到 STIX:

@font-face {
    font-family: 'stix';
    src: url('stixgeneral-webfont.eot');
    font-weight: normal;
    font-style: normal;
}
@font-face {
    font-family: 'stix';
    src: url('stixgeneralbol-webfont.eot');
    font-weight: bold;
    font-style: normal;
}
body {font-family: arial, stix, sans-serif;}

…但这确实不会在 100% 的时间里都有效(虽然有时它确实显示字符!):

@font-face {
    font-family: 'stix';
    src: url('stixgeneral-webfont.eot');
    font-weight: normal;
    font-style: normal;
}
@font-face {
    font-family: 'stix';
    src: url('stixgeneralitalic-webfont.eot'); /* note - italic font variant */
    font-weight: normal;
    font-style: italic;
}
body {font-family: arial, stix, sans-serif;}

出现这种情况的原因似乎是 STIX 字体包有错误。

为了解决这个问题,请在 FontForge 中打开您的 STIX 字体包并保存 - FontForge 会通知您错误。修复这些,然后才导入到 FontSquirrel。字体后备现在应该可以正常工作了。

【讨论】:

  • 在用作主要字体而不是作为备用字体时,它是否正确应用了所有变体字体?
【解决方案3】:

尝试在fontsquirrel.com上使用转换器

【讨论】:

  • 感谢甲基的回复。它最初是使用 fontsquirrel.com 创建的,所以这不是问题。
【解决方案4】:

问题可能是“在 Internet Explorer 8 和更早版本中,only one URL value is supported”。

另外,不要使用@font-face 作为后备字体,而是选择您喜欢的字体,不要以任何顺序声明“arial, helvetica”,而是直接使用无衬线字体。这样,每个平台都使用最适合的无衬线字体,例如 Windows 的 Arial 和 OS X 的 Helvetica 等。

【讨论】:

    【解决方案5】:

    顺便说一句... IE 将尝试加载 SVG 格式,因此您应该在 svg 之后定义 EOT src! (IE 错误)。

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 1970-01-01
      • 2015-01-19
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2013-06-04
      相关资源
      最近更新 更多