4

更新:看起来我陷入了实际上并不是问题原因的相关性。问题实际上是与如何部署 CSS 文件无关的问题。有关详细信息,请参阅下面的答案。

我的 @font-face 在 WebKit(Safari 和 Chrome)和 Opera 中运行良好,但在 Firefox 3.5 或 IE 8 中运行良好。

根据 Google 和其他人的建议,我从与我的主站点不同的域中提供所有静态资产,包括 CSS。如果我从同一个域中提供所有内容,它在所有浏览器中都可以正常工作(注意:这意味着关于 CSS 语法的答案是无用的。我已经弄清楚了所有这些并且工作得很好。这只是关于跨域问题) .

如果我从我的静态资产域提供 CSS 和字体文件,并让静态资产服务器设置适当的访问控制标头(Access-Control-Allow-Origin),它应该可以工作,它可以在除 FF 3.5 和 IE 之外的任何地方工作。

我需要做什么才能完成这项工作?

4

3 回答 3

2

迄今为止我发现的最佳答案,希望对其他人有所帮助:

据我所知,关键问题是 CSS 文件(不是字体文件)是否跨域加载。如果我从我的静态资产域中加载带有@font-face 声明的 CSS 文件,那么无论访问控制标头如何,我所做的任何事情都不会使字体在 FF 或 IE 中工作。如果我从与页面相同的域加载 CSS 文件,或者我只是将我的 @font-face 声明移动到页面头部的样式块中,那么它可以在所有浏览器中工作(我什至可以跨域加载字体文件只要我设置了访问控制标头)。

总结一下:无论如何,AFAICT、FF 3.5 和 IE 8 将拒绝在跨域加载的 CSS 文件中遵守 @font-face 声明。

如果有人知道得更好并且可以指出我可能做错了什么,我很乐意对此进行纠正。

的确,我错了。事实证明,我们用于部署要从专用域提供服务的资产的 CSS 压缩器是用“@media screen { ... }”包装整个 CSS 块。我仔细比较了@font-face 规则,以确保压缩器没有弄乱它们,但从未检查过 CSS 文件的开头和结尾来捕捉包装。当我切换到服务同域时,这种包装没有发生。

事实证明,IE 和 Firefox 不支持包裹在 @media 中的 @font-face 声明:Safari、Chrome 和 Opera 支持。

叹。

于 2010-01-09T00:46:58.490 回答
-1

我建议查看这篇 IEBlog 帖子,它描述了如何在 IE 上进行字体嵌入。不,这与 CSS3 方式不匹配,不,您没有任何其他方式可以在 IE 中使用 @font-face 来实现。

可能值得注意的是,微软向 W3C 提交了 EOT 方法,以使其标准化,而 W3C 已经表达了对该行动过程的兴趣。

于 2010-01-09T00:56:52.357 回答
-2

这个链接对我帮助很大:http ://snook.ca/archives/html_and_css/becoming-a-font-embedding-master

不幸的是,我对我想尝试的大多数字体的文本质量感到非常失望。我无法确定某些字体是否不能抗锯齿,但结果并不令人满意,我仍然使用图像替换。

于 2010-01-09T00:53:02.337 回答