【问题标题】:IE11 @font-face fails when used in @media queryIE11 @font-face 在@media 查询中使用时失败
【发布时间】:2014-08-19 16:28:37
【问题描述】:

我在 IE11 中使用以下字体(从 MyFonts 下载)。当以以下方式指定时,它们会完美加载:

@import url("//hello.myfonts.net/count/myFId"); 
@font-face {font-family: 'HelveticaNeueLTStd-Lt'; src: url('webfonts/myFId_0_0.eot');src: url('webfonts/myFId_0_0.eot?#iefix') format('embedded-opentype'), url('webfonts/myFId_0_0.woff') format('woff'), url('webfonts/myFId_0_0.ttf') format('truetype');}   
@font-face {font-family: 'HelveticaNeueLTStd-Hv'; src: url('webfonts/myFId_1_0.eot');src: url('webfonts/myFId_1_0.eot?#iefix') format('embedded-opentype'), url('webfonts/myFId_1_0.woff') format('woff'), url('webfonts/myFId_1_0.ttf') format('truetype');}

但是,当在媒体查询中指定时,字体不会加载到 IE11(无论屏幕分辨率如何)。它只是使用 Times New Roman。

@import url("//hello.myfonts.net/count/myFId");
@media all and (min-width:800px) {
    @font-face {font-family: 'HelveticaNeueLTStd-Lt'; src: url('webfonts/myFId_0_0.eot');src: url('webfonts/myFId_0_0.eot?#iefix') format('embedded-opentype'), url('webfonts/myFId_0_0.woff') format('woff'), url('webfonts/myFId_0_0.ttf') format('truetype');}
    @font-face {font-family: 'HelveticaNeueLTStd-Hv'; src: url('webfonts/myFId_1_0.eot');src: url('webfonts/myFId_1_0.eot?#iefix') format('embedded-opentype'), url('webfonts/myFId_1_0.woff') format('woff'), url('webfonts/myFId_1_0.ttf') format('truetype');}
}

Firefox 和 Chrome 完美运行。任何地方都没有指定其他字体规则,所以它不是继承问题。

这是一个错误还是我在做一些愚蠢的事情?

我们的想法是假设便携式设备的连接速度较慢(例如,在移动设备时连接),因此我们跳过自定义字体并在这些情况下使用通用字体。

【问题讨论】:

  • 谢谢,但它不是重复的。将导入移到媒体查询之外时,问题仍然存在。已更新问题以反映这一点。
  • @norin89 是在正确的轨道上。尝试将您的 @font-face 放在另一个文件中,然后像其他问题所示那样导入该文件。

标签: css internet-explorer webfonts


【解决方案1】:

经过一些额外的研究,我找到了原因和解决方案。
原因是:

样式表中的@import 规则必须位于所有规则集之前。一个 遵循一个或多个规则集的@import 规则将被忽略。 Reference: SitePoint article

谢天谢地,这个解决方案既简单又好用。通过从样式表中删除媒体查询,并将其放在 HTML 参考中,我实现了这两个要求并删除了额外的 @import 规则:

<link rel="stylesheet" href="/css/fonts.css" media="(min-width:800px)" />

【讨论】:

  • 只是一些附加信息:根据MDN,小于 800px 的设备仍然会下载样式表本身。但是,样式表中声明的 CSS 将被应用。
【解决方案2】:

我会建议一种不同的方法...而不是在媒体查询中指定字体,我只会在媒体查询中调用字体...我相信这个问题是有效的,因为字体应该是全局的,而不是你只需在需要时调用字体...

@import url("//hello.myfonts.net/count/myFId"); 
@font-face {font-family: 'HelveticaNeueLTStd-Lt'; src: url('webfonts/myFId_0_0.eot');src: url('webfonts/myFId_0_0.eot?#iefix') format('embedded-opentype'), url('webfonts/myFId_0_0.woff') format('woff'), url('webfonts/myFId_0_0.ttf') format('truetype');}   
@font-face {font-family: 'HelveticaNeueLTStd-Hv'; src: url('webfonts/myFId_1_0.eot');src: url('webfonts/myFId_1_0.eot?#iefix') format('embedded-opentype'), url('webfonts/myFId_1_0.woff') format('woff'), url('webfonts/myFId_1_0.ttf') format('truetype');}

@media all and (min-width:800px) {
    div {
        font-family: 'HelveticaNeueLTStd-Lt';
    }
}

【讨论】:

  • 但问题是设备不应该下载不需要的字体。这种方法是否会导致始终下载字体?我希望如此。
  • 在这种情况下,我会为字体创建一个外部文件,并在媒体查询中 @inport 这个文件...我以前从未尝试过,但它可能是一个选项...跨度>
  • 这种方法会导致字体无法在所有浏览器中加载。不过,感谢您的意见,因为跟进第二个建议在另一个网站上发现了答案。我在下面发布了合适的方法/解决方案,希望对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2015-03-05
  • 1970-01-01
相关资源
最近更新 更多