ChatGPT解决这个技术问题 Extra ChatGPT

如何让谷歌字体在 IE 中工作?

我一直在开发一个使用 Google Fonts API 的网站。它很棒,据说已经在 IE 中测试过了,但是在 IE 8 中测试时,字体根本就没有样式。

我将字体作为 Google instructs 包含在内,因此:

<link href="http://fonts.googleapis.com/css?family=Josefin+Sans+Std+Light"  
 rel="stylesheet" type="text/css" />

并将其名称添加到 CSS 中字体系列的前面,因此:

body { font-family: "Josefin Sans Std Light", "Times New Roman", Times, serif;字体大小:16px;溢出-y:滚动;溢出-x:隐藏;颜色:#05121F; }

在 Chrome、Firefox、Safari 中工作就像一个魅力。 IE 8 中没有骰子。有人知道为什么吗?

使用 IE11 模拟回 IE8 的开发人员的注意事项:您必须确保将用户代理字符串切换回旧 IE 版本,因为仅切换文档模式不会让 Google 的服务器知道发送正确的字体类型 (EOT)。

C
Community

看起来 IE8-IE7 无法通过使用 link 标记 href相同文件请求 理解多种 Google Web 字体样式。

这两个链接帮助我解决了这个问题:

请参阅此未解决的 Google 问题,并查看评论。

另请参阅此 StackOverlow 答案 Google Web Fonts don't work in IE8

我让它在 IE7-IE8 中工作的唯一方法是只有一个 Google Web Font 请求。并且在 link 标记的 href 中只有一种字体样式:

所以通常你会有这个,在同一个请求中声明多种字体样式:

<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:400,600,300,800,700,400italic" /> 

但是在 IE7-IE8 中添加一个 IE 条件并分别指定每种 Google 字体样式,它将起作用:

<!--[if lte IE 8]>
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:400" /> 
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:700" /> 
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:800" />
<![endif]-->

希望这可以帮助别人!


这应该是公认的答案。 Smashing Magazine 的一篇文章深入探讨了这个问题(并提供了相同的解决方案):smashingmagazine.com/2012/07/11/…
但较旧的 IE 仅支持 32 个样式表,因此这可能会导致更严重的问题 :(
仅当使用 @import 规则时.. 不在 IE conditional 内。 @import 一直都有限制,更不用说性能缓慢了。我看不到您将加载那么多样式表的实例。如果是这样,最好将所有样式表结合起来以获得最佳性能来限制服务器请求。
R
Richard Harrison

如他们的 technical considerations 页面所示,该方法是正确的 - 所以您绝对没有做错任何事情。但是,Google 代码上的 this bug report 表明 Google 为此制作的字体存在问题,特别是 IE 版本。这似乎只影响某些字体,但它真的很糟糕。

线程上的答案表明问题出在谷歌提供的文件上,所以你无能为力。作者建议从其他位置(例如 FontSquirrel)获取字体,并改为在本地提供字体,在这种情况下,您可能还会对 the League of Movable Type 等网站感兴趣。

注意截至 2010 年 10 月,该问题已在 Google 代码错误报告中报告为已修复并已关闭。


@Yi Jiang,你说得对,我在本地提供文件,Font Squirrel 的 @font-face kit 更强大,它工作得很好。
哦,至于这个问题正在修复和关闭,谷歌有很多流行的webfonts 在2013 年在IE 中不起作用。这闻起来像是故意“丑化” IE 浏览体验。使用 Font Squirrel 作为首选,直到浏览器完成他们的人气竞赛。
它似乎影响了我在 ie9 中的所有字体。
但是,可以使这些字体在 < 中工作。 IE9。请参阅my answer
问题真的解决了吗?我正在使用字体 lato,但它仍然没有被应用...
g
gitaarik

Google Fonts 使用 Web 开放字体格式 (WOFF),这很好,因为它是 W3C 推荐的字体格式。

早于 IE9 的 IE 版本不支持 Web 开放字体格式 (WOFF),因为它当时不存在。要支持 < IE9,您需要在 Embedded Open Type (EOT) 中提供您的字体。为此,您需要编写自己的 @font-face css 标签,而不是使用 Google 的嵌入脚本。您还需要将原始 WOFF 文件转换为 EOT。

您可以在这里将您的 WOFF 转换为 EOT,方法是先将其转换为 TTF,然后再转换为 EOT:http://convertfonts.com/

然后你可以像这样提供 EOT 字体:

@font-face {
    font-family: 'MyFont';
    src: url('myfont.eot');
}

现在它可以在 < IE9 中运行。但是,现代浏览器不再支持 EOT,因此现在您的字体将无法在现代浏览器中使用。所以你需要同时指定它们。 src 属性通过逗号分隔字体 url 并指定类型来支持这一点:

src: url('myfont.woff') format('woff'),
     url('myfont.eot') format('embedded-opentype');

但是,< IE9 不理解这一点,它只是抓住了第一个引号和最后一个引号之间的文本,所以它实际上会得到:

myfont.woff') format('woff'),
url('myfont.eot') format('embedded-opentype

作为字体的 URL。我们可以通过首先指定一个只有一个 EOT 格式的 url 的 src 来解决这个问题,然后指定第二个 src 属性,该属性适用于现代浏览器,而 < IE9 将无法理解。因为 < IE9 不会理解它,它会忽略标签,所以 EOT 仍然可以工作。现代浏览器将使用它们支持的最后一个指定字体,因此可能是 WOFF。

src: url('myfont.eot');
src: url('myfont.woff') format('woff');

所以只是因为在第二个 src 属性中您指定了 format('woff'),< IE9 不会理解它(或者实际上它只是在 url myfont.woff') format('woff 处找不到字体)并将继续使用第一个指定的字体(eot)。

所以现在您的 Google Webfonts 可以在 < IE9 和现代浏览器上运行!

有关不同字体类型和浏览器支持的更多信息,请阅读 Alex Tatiyants 撰写的这篇完美文章:http://tatiyants.com/how-to-get-ie8-to-support-html5-tags-and-web-fonts/


这就是我在使用 Open Sans Light、300、400 字体系列时所做的。他们中的一些人不想在 FF 中渲染,而有些人不想在 IE 中渲染。因此,我找到了在 .css 中使用 @font-face 的相同解决方案并且它有效。我不确定,但如果它是一个完美的解决方案,因为它使用的是一个 url,将来可能会改变
如果您自己托管字体,那没问题。
这不是真的,谷歌字体确实发送 EOT 版本。它只是检测您的浏览器代理并仅向您发送必要的类型。您可以尝试在 IE 中进行模拟,不要忘记更改用户代理字符串。使用 pacifico 字体、Josefin 和 Source Sans Pro 进行测试。
也许他们现在这样做了,我想他们在我写这个答案的时候还没有
按照这些思路,IE11 不支持 woff2,但支持 woff。因此,对于 IE11,我必须下载 .woff 版本的 Google 字体。请参阅这篇文章了解如何执行此操作:medium.com/minitheory-design/…
M
Matt

虽然 Yijiang 的解决方案可能有效,但我不认为放弃 Google Web Font API 是正确的答案。当本地 jQuery 文件没有从 CDN 正确加载时,我们会提供它,对吗?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/js/jquery-1.9.0.min.js"><\/script>')</script>

那么为什么我们不对字体做同样的事情,特别是 < IE9 呢?

<link href='http://fonts.googleapis.com/css?family=Cardo:400,400italic,700' rel='stylesheet' type='text/css'>
<!--[if lt IE 9]><link href='/css/fonts.css' rel='stylesheet' type='text/css'><![endif]-->

这是我使用自定义字体时的过程:

从 Google 下载字体的 ZIP 文件夹,并使用 Font Squirrel 的 @font-face Generator 创建本地网络字体。创建一个 fonts.css 文件,该文件调用新创建的本地托管字体文件(如果 < IE9,则仅链接到该文件,如上所示)。注意:@font-face 生成器会为您创建此文件。 @font-face { font-family: 'cardoitalic'; src: url('cardo-italic-webfont.eot'); src: url('cardo-italic-webfont.eot?#iefix') 格式('embedded-opentype'), url('cardo-italic-webfont.woff') 格式('woff'), url('cardo-斜体webfont.ttf')格式('truetype'),url('cardo-italic-webfont.svg#cardoitalic')格式('svg');字体粗细:正常;字体样式:正常; } @font-face { 字体系列:'cardobold'; src: url('cardo-bold-webfont.eot'); src: url('cardo-bold-webfont.eot?#iefix') 格式('embedded-opentype'), url('cardo-bold-webfont.woff') 格式('woff'), url('cardo-粗体-webfont.ttf')格式('truetype'),url('cardo-bold-webfont.svg#cardobold')格式('svg');字体粗细:正常;字体样式:正常; } @font-face { font-family: 'cardoreregular'; src: url('cardo-regular-webfont.eot'); src: url('cardo-regular-webfont.eot?#iefix') 格式('embedded-opentype'), url('cardo-regular-webfont.woff') 格式('woff'), url('cardo-常规-webfont.ttf')格式('truetype'),url('cardo-regular-webfont.svg#cardoregular')格式('svg');字体粗细:正常;字体样式:正常;在主样式表中使用 IE 条件类来避免虚假的粗细和样式,您的字体样式可能如下所示: h1{ font-size:3.25em;字体粗细:正常;字体样式:斜体;字体系列:'Cardo','cardoitalic',衬线;行高:1.25em; } h2{ 字体大小:2.75em;字体粗细:700;字体系列:'Cardo','cardobold',衬线;行高:1.25em; } 强 ,b{ 字体系列:'Cardo','cardobold',serif;字体重量:700,} .lt-ie9 h1{ 字体样式:正常; } .lt-ie9 h2{ 字体粗细:正常; } .lt-ie9 强,.lt-ie9 b{ 字体粗细:正常,}

当然,这是一些额外的工作,但我们难道没有期待 IE 会这样做吗?此外,它会在一段时间后成为第二天性。


使用此方法时要小心,因为其中一些字体可能具有某些许可要求,需要从托管服务器提供它们。提醒一下:在将字体托管在自己的服务器上之前,请确保您拥有使用该字体的有效许可证。
A
Adam

对于它的价值,我无法让它在 IE7/8/9 上运行,并且多重声明选项没有任何区别。

对我来说,解决方法是根据 Technical Considerations Page 上的说明突出显示...

为了在 IE 中获得最佳显示效果,请将样式表的“链接”标记设置为 HTML 的“头”部分中的第一个元素。

现在适用于我的 IE7/8/9。


P
PhotoAlbert

我尝试了上面的所有选项,但它们都不起作用。然后我在我的文件夹(新)中找到了谷歌字体(Over the Rainbow),并在下面使用了 IE 条件,它工作得很好。

<!--[if IE]>
<style type="text/css">
    @font-face {
    font-family: "Over the Rainbow";
    src: url("../new/over.ttf");
    src: local("Over the Rainbow"), url("../new/over.ttf");
    }
</style>
<![endif]-->

我希望它会有所帮助


P
Pawel

您可以尝试 fontsforweb.com,其中字体适用于所有浏览器,因为它们以 TTF、WOFF 和 EOT 格式提供,以及准备粘贴到您的页面上的 CSS 代码,即

@font-face{ 
    font-family: "gothambold1";
    src: url('http://fontsforweb.com/public/fonts/5903/gothambold1.eot');
    src: local("Gotham-Bold"), url('http://fontsforweb.com/public/fonts/5903/gothambold1.woff') format("woff"), url('http://fontsforweb.com/public/fonts/5903/gothambold1.ttf') format("truetype");
}
.fontsforweb_fontid_5903 {
    font-family: "gothambold1";
}

或者您可以下载压缩包并附上 CSS 文件

然后只需将类添加到任何元素以应用该字体即

<h2 class="fontsforweb_fontid_5903">This will be written with Gotham Bold font and will work in all browsers</h2>

看到它工作:http://jsfiddle.net/SD4MP/


a
amitgur

这一切都是为了尝试所有这些答案,对我来说,除了下一个解决方案之外没有任何效果:建议使用 Google 字体

@import 'https://fonts.googleapis.com/css?family=Assistant';

但是,我在这里使用的是外文字体,它只在 IE11 上不起作用。我发现这个解决方案有效:

@import 'https://fonts.googleapis.com/css?family=Assistant&subset=hebrew';

希望能节省一些宝贵的时间


s
sam

试试这种类型的链接,它也可以在 IE 中运行。希望这可以帮助 。

<link href='//fonts.googleapis.com/css?family=Josefin+Sans:300,400,600,700,300italic' rel='stylesheet' type='text/css'>

我认为它实际上不会。 IE8 及以下版本需要为每种不同的字体粗细提供单独的链接。请参阅上面@PAPAFRESH 的答案。
T
Thyago Quintas

我和你有同样的问题。我找到了一个使用 Adobe Web Fonts 代码的解决方案,在 Internet Explorer、Chrome、Firefox 和 Safari 中完美运行。

此页面中的更多信息:http://html.adobe.com/edge/webfonts/


R
Reza Mamun

经过我的调查,我想出了这个解决方案:

//writing the below line into the top of my style.css file
@import url('https://fonts.googleapis.com/css?family=Assistant:200,300,400,600,700,800&subset=hebrew');

必须注意:我们必须要正确书写此字体的 font-weight。例如:font-weight:900; 将不起作用,因为在使用上述链接从 Google 导入时,我们没有在 URL 地址中包含 900(如 200,300,400,600,700,800)。我们可以在上面的 URL 中添加或包含 900,但只有当上面的 Google Font 在嵌入时具有此选项时,才起作用