首页 文章

图标字体未在IE11中加载

提问于
浏览
29

我们使用icomoon作为我们的图标字体,它们在Chrome和Firefox中运行良好,但不会在IE11中显示......有时候 . 它似乎适用于第一页加载,但不适用于后续页面加载 . 清除缓存似乎没有重置它 . 这个问题可能出现在其他IE版本中,现在我们只关注IE11 .

这是我们的@ font-face:

@font-face {
font-family: 'icon';
src:url('fonts/icon.eot?-3q3vo5');
src:url('fonts/icon.eot?#iefix-3q3vo5') format('embedded-opentype'),
    url('fonts/icon.woff?-3q3vo5') format('woff'),
    url('fonts/icon.ttf?-3q3vo5') format('truetype'),
    url('fonts/icon.svg?-3q3vo5#rezku') format('svg');
font-weight: normal;
font-style: normal;
}

[class^="icon-"], [class*=" icon-"] {
font-family: 'icon';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;

/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-alphabet:before {
content: "\e600";
}
/* etc etc etc */

但这里变得奇怪 . 查看开发人员工具,正在发送字体的HTTP请求,但只接收了几百个字节(可能只是 Headers ) .

Network panel

但HTTP响应正确地将内容长度列为几千字节 .

Response headers

“响应正文”选项卡只显示“无数据可查看” .

您可以在网络面板屏幕截图中看到Google字体的行为不是这样的 .

在位置栏中粘贴URL会导致下载完整文件 .

7 回答

  • 2
  • 23

    遇到类似的问题,从上面的截图中,响应的Cache-Control Headers 为“no-store” . IE似乎在缓存和字体方面存在问题 .

    同时删除'Cache-Control:no-store'和“Pragma:no-cache” Headers 可以让我们再次显示图标字体 .

    https://github.com/FortAwesome/Font-Awesome/issues/6454

  • 2

    在调查了同样的问题,并通过在线发布的各种解决方案后,我创建了以下故障排除列表,其中涵盖了大多数潜在原因:

    • 在Internet选项/安全/自定义级别/字体下载启用/禁用下,IE中禁用字体下载 . 它们可能会被您的网络管理员禁用,在这种情况下,您将无法查看或更改此设置 .

    • 您的HTTP标头阻止IE在本地存储字体文件 . 要修复此问题,请删除所有 Cache-Control: no-store, no-cachePragma: no-cache 标头或任何带有过去日期的 Expires 标头 . 此外 Vary 标头在IE中有其技巧,如果设置为 Accept-EncodingUser-AgentHostAccept-Language 以外的任何其他内容,则IE将不会缓存任何内容, unless 也会出现 ETAG 标头(请参阅this MSDN blog post) .

    • 您没有为字体下载设置正确的MIME类型 . 例如,对于通常的字体类型( eot, woff, woff2 ),Jetty 9将默认设置 Content-Type: text/plain . 有关要使用的正确内容类型,请参阅this answer .

    • 确保使用 display: blockdisplay: inline-block 作为图标元素 .

    • 最后,确保在FontAwesome上查看troubleshooting guide .

  • 0

    我有一个类似的问题,它似乎是由IE与某些 displayposition 设置与iconfonts结合有困难引起的 .

    它通常应该使用:

    element:before {
         display:block;
         position: absolute;
         ... your styles ...
    }
    
  • 1

    我遇到了类似的问题,但使用Bootstrap字体图标(Glyphicons) . 你可以试试这是否有效:

    (通常在Windows 10上)IE-11设置已更改为不下载任何外部字体并仅使用Windows中可用的字体 . 这是默认行为 .

    但是我们可以在IE中更改此设置以使其能够下载外部字体 . 以下是IE中要采取的步骤 - 转到:设置>> Internet选项>>安全
    enter image description here

    单击“Internet”(或您可能正在使用的任何区域)>>“自定义级别...”
    “安全设置”中的下一步 - 启用“字体下载” . 默认情况下,它将被禁用 .
    enter image description here

    刷新页面

  • 0

    语法是正确的,但是您使用的转换器从.tff转换为.eof的方式可能存在问题 . 有关此问题的更多详细信息,请参阅此文章http://www.iandevlin.com/blog/2009/12/webdev/adventures-with-font-face

    与此同时,您可以尝试使用Google字体托管的字体来测试问题 . 我这样说是因为谷歌无缝地处理跨浏览器兼容性 . 如果事实证明Google字体有效,那么您就知道它的字体转换方式存在问题,您需要尝试另一种字体 . 根据我的理解Font Squirrel非常擅长生成跨浏览器兼容的字体 . 我希望这有助于好运

  • 3

    在我的情况下,它已损坏.eot字体文件 . 我已经生成了新的(新的.css样式)并修复了问题 . 试试吧 .

    PS . 确保在@ font-face支持IE的EOT,例如:

    @font-face {
      font-family: "fontName";
      src:url("../../src/theme/fonts/fontName.eot");
      src:url("../../src/theme/fonts/fontName.eot?#iefix") format("embedded-opentype"),
      url("../../src/theme/fonts/fontName.woff") format("woff"),
      url("../../src/theme/fonts/fontName.ttf") format("truetype"),
      url("../../src/theme/fonts/fontName.svg#fontName") format("svg");
      font-weight: normal;
      font-style: normal;
    }
    

相关问题