【发布时间】:2012-08-02 11:16:14
【问题描述】:
我需要在 html 文件中包含字体 (OpenSymbol),并且字体文件位于本地文件夹中(我知道它的确切绝对路径)。如果我像这样使用@font-face:
@font-face {
font-family: "OpenSymbol";
src: url("<absolutePath>/OpenSymbol.ttf") format("truetype");
}
它适用于 Chrome、Opera 和 Safari,但不适用于 Firefox 和 IE9。其他 @font-face 用法在所有浏览器中都可以正常工作。
顺便说一句,在 Chrome 中,我收到一条警告:
Resource interpreted as Font but transferred with MIME type application/octet-stream
我可以做些什么来干净地包含本地存储的字体,该字体未安装在操作系统上?
编辑:
我发现不同 url 的列表似乎不起作用!如果我将[...].ttf url 放在首位,Chrome 会加载字体,但如果它在其他地方则不会!
第二次编辑:
我让它可以在除 Firefox 之外的所有浏览器中工作:
@font-face {
font-family: 'OpenSymbol';
src: url('file:<path>/openSymbol.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'OpenSymbolEOT';
src: url('file:<path>/openSymbol.eot') format('embedded-opentype');
font-weight: normal;
font-style: normal;
}
...
然后
.element {
font-family: OpenType, OpenTypeEOT, [...];
}
无论如何,它在 IE 中确实可以工作,但在 Eclipse 中却不行,它使用 IE 的渲染引擎...o.O
顺便说一句,firefox因为安全问题出现问题:See here
【问题讨论】:
-
“本地”文件到底是什么意思?用户文件系统上的本地 URL?
-
据我所知,该警告没有多大意义(如果我错了,请告诉我)。这只是意味着调用该字体的服务器发送了带有该字体的错误标头。据我所知,您唯一能做的就是编辑服务器设置以更改它为 .otf 文件发送的标头(我相信这是扩展名)。只要字体显示正确,那么从经验上来说没什么大不了的。
-
@Pekka:是的,没错。例如(在 Windows 上):
file:/C:/path/to/folder/openSymbol.ttf -
如果用户有字体,那么就没有理由使用@font-face,如果他们没有,那么你的CSS就不能工作。 IE 9也需要@font-face的特殊实现,我认为IE中加载的字体必须是.eot。
-
不,用户没有字体!在一个带有html界面的eclipse插件中使用,字体文件是插件的一部分。我用
.eot?试过了,没有帮助... :(