CSS @font-face 在 Firefox 中无法正常工作,但在 Chrome 和 IE 中可以。

198
以下代码在Google Chrome beta和IE 7中都能正常工作。但是,Firefox似乎有问题。我怀疑这可能是由于我的CSS文件的引入方式导致的问题,因为我知道Firefox对跨域导入并不友好。但是,这只是纯静态HTML,不存在跨域问题。在我的landing-page.html页面上,我像这样进行CSS导入:
<link rel="stylesheet" href="../css/main.css" type="text/css" media="screen, projection" />

在main.css中,我有另外几个像这样的导入:

@import url("reset.css");
@import url("style.css");
@import url("type.css");

在type.css文件中,我有以下声明:

@font-face {
    font-family: "DroidSerif Regular";
        src: url("font/droidserif-regular-webfont.eot");
        src: local("DroidSerif Regular"), 
                url("font/droidserif-regular-webfont.woff") format("woff"), 
                url("font/droidserif-regular-webfont.ttf")     format("truetype"), 
                url("font/droidserif-regular-webfont.svg#webfontpB9xBi8Q")     format("svg"); 
    font-weight: normal; font-style: normal; }
@font-face {
    font-family: "DroidSerif Bold";
    src: url("font/droidserif-bold-webfont.eot");
    src: local("DroidSerif Bold"), 
        url("font/droidserif-bold-webfont.woff") format("woff"), 
        url("font/droidserif-bold-webfont.ttf") format("truetype"), 
        url("font/droidserif-bold-webfont.svg#webfontpB9xBi8Q") format("svg");
    font-weight: normal; font-style: normal; }

body { font-family: "DroidSerif Regular", serif; }
h1 { font-weight: bold; font-family: "DroidSerif Bold", serif; }

在与type.css相同的位置上,我有一个名为“font”的目录,其中包含所有woff/ttf/svg文件等。

我被这个问题难住了。在Chrome和IE中可以工作,但在Firefox中无法正常工作。这怎么可能?我错过了什么?


3
我现在正遇到这个问题,与FontSquirrel生成的指令和字体完全相同。 - jason
为了测试,您可以尝试将@font-face声明添加到HTML的<style>标签之间,看看是否有相同的问题? - Chris_O
添加一个逗号也可以解决这个问题,例如:url('Sans-serif') format('woff')。 - Farzan Balkani
30个回答

0
在我的情况下,我解决了插入font-face样式代码的问题。
<style type="text/css">
@font-face { 
font-family: 'Amazone';font-style: normal; 
/*font-weight:100; -webkit-font-smoothing: antialiased; font-smooth:always;*/ 
src: local('Amazone'), url(font/Amazone.woff) format('woff');} 
</style>

直接在您的index.html或php页面的头部中,使用style标签。 对我来说很有效!


0

我曾经遇到过类似的问题。Fontsquirel演示页面在FF中可以正常工作,但是我的页面却不行,尽管所有文件都来自同一个域!

后来发现,我使用了绝对URL(http://example.com/style.css)链接我的样式表,因此FF认为它来自不同的域。将我的样式表链接href更改为/style.css就解决了这个问题。


0
也许不是因为你的代码,而是因为你的Firefox配置。
尝试从“工具栏”中将编码从西方更改为Unicode
View > Text Encoding > Unicode

0

你能用Firebug检查一下是否有404错误吗?我以前也遇到过问题,发现扩展名相同但是Linux文件.ttf与file.TTF不同...在所有浏览器中都可以工作,除了Firefox。

希望这能帮到你!


1
我强烈怀疑它只会在一个浏览器中出现404错误而不是其他浏览器。 - jason
@jason 一个浏览器可以使用与另一个不同的文件类型。 :) - ipalaus
好的,在我遇到这个问题的情况下,我可以百分之百确定Firebug的网络面板显示它成功加载了字体。 - jason

0
由于这是该问题的顶级Google搜索结果之一,因此我想添加解决此问题的方法:
我必须从font-face的src中删除format(opentype),然后它在Firefox中也可以正常工作。在那之前,它在Chrome和Safari中运行良好。

0

Firefox允许您完全关闭Web字体。这对我来说是这种情况。

要打开它,请转到“首选项>内容>高级”并选中框。

在fontspring的相关文章



-2

我不知道你是如何创建语法的,因为我从未在字体声明中使用过SVG,但Font Squirel有一个非常好的工具,可以从单个字体创建防弹语法font-face。

http://www.fontsquirrel.com/fontface/generator


谢谢rnaud,实际上我使用了fontsquirrel :)。只是用制表符和空格重新格式化为可读形式。 - KG -
你从未在字体声明中使用过SVG,但你使用了Font Squirrel吗?那么你已经在字体声明中使用了SVG。 - jason
1
@jason:你可以选择不使用Font Squirrel的SVG。 - rossisdead

-2

我的问题是Windows将字体命名为'font.TTF',而Firefox期望的是'font.ttf'。在Linux中打开我的项目后,我发现这个问题并将字体重命名为正确的名称,然后一切正常了。


-2

可能也是在font-face标签路径中使用URL的问题。如果你使用"http://domain.com",它在Firefox中不起作用,对我来说将其更改为"http://www.domain.com"可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接