RF1001: 各浏览器对 '@font-face' 规则支持的字体格式不同,IE 支持 EOT 字体,Firefox Safari Opera 支持 TrueType 等字体
http://w3help.org/zh-cn/causes/RF1001
http://blog.csdn.net/agileclipse/article/details/12450949
http://www.zhaozi.cn/html/fonts/ 字体网
作者:陆远标准参考
根据 CSS3 草案中的描述,'@font-face' 规则允许使用链接到需要时自动激活的字体。这使得用户可以使用在线的字体,而不仅仅拘泥于使用用户端系统内的字体。一套对字体的描述定义了字体资源的位置,可以是本地也可以是其他地方,以及自定义个性化字体风格。
规则定义格式:
@font-face {
descriptor: value;
descriptor: value;
[...]
descriptor: value;
}
如:
@font-face {
font-family: Gentium;
src: url(http://site/fonts/Gentium.ttf);
} p { font-family: Gentium, serif; }
字体引用:src 描述
- 名称
- src
- 值
- [ <uri> [format(<string> [, <string>]*)] | <font-face-name> ] [, <uri> [format(<string> [, <string>]*)] | <font-face-name> ]*
- 初始值
- N/A
此描述指定了资源中包含的字体数据。无论字体是下载的或者是本地安装的,这个描述都是必需的,以逗号作为分隔的外部引用或本地安装的字体名称的列表中各值的优先级依次递减。当遇到不合理的数据则被当作未找到字体处理。 外部引用包含一个 URI,后面有一个可选的 format 参数可以提示该资源 URI 所引用的字体格式,format 与 URI 之间通过逗号分隔。 如:src: url(../fonts/LateefRegAAT.ttf) format("truetype-aat"), url(../fonts/LateefRegOT.ttf) format("opentype");
初步定义的格式字符串列表:
String | Font Format | Common extensions |
---|---|---|
truetype | TrueType | .ttf |
opentype | OpenType | .ttf, .oft |
truetype-aat | TrueType with Apple Advanced Typography extensions | .ttf |
embedded-opentype | Embedded OpenType | .eot |
svg | SVG Font | .svg, .svgz |
关于 @font-face rule 的详细资料,请参考 CSS Fonts Module Level 3 草案 4.1 The @font-face rule 中的内容。
关于 src descriptor 的详细资料,请参考 CSS Fonts Module Level 3 草案 4.3 Font reference: the 'src' descriptor 中的内容。
问题描述
各浏览器对 '@font-face' 规则支持的字体格式不同,IE 仅支持 Embedded OpenType,Firefox 支持 TrueType、OpenType 及 WOFF,Chrome、Safari、Opera 则支持 TrueType、OpenType、SVG Font。
造成的影响
若在使用 '@font-face' 规则时仅仅考虑一种字体格式,则可能在某些浏览器中无法应用规则所引入的字体。
受影响的浏览器
IE6 | 仅支持 Embedded OpenType(.eot) 格式。 |
---|---|
IE7 | 仅支持 Embedded OpenType(.eot) 格式。 |
IE8 | 仅支持 Embedded OpenType(.eot) 格式。 |
Firefox 3.5 | 支持 TrueType、OpenType(.ttf, .otf) 格式。 |
Firefox 3.6 | 支持 TrueType、OpenType(.ttf, .otf) 及 WOFF 格式。 |
Chrome | 支持 TrueType、OpenType(.ttf, .otf) 及 SVG Font(.svg) 格式。 |
Safari | 支持 TrueType、OpenType(.ttf, .otf) 及 SVG Font(.svg) 格式。 |
Opera | 支持 TrueType、OpenType(.ttf, .otf) 及 SVG Font(.svg) 格式。 |
问题分析
'@font-face' 规则首先定义在 CSS2 规范中,但是在 CSS2.1 中被删除,目前又被纳入到 CSS3 推荐草案中。at-rule(@)包含一条或多条被称作 font descriptor (字体描述)的特性声明,与那些在常规的 CSS 规则中的类似。由于 '@font-face' 规则没有被纳入到目前应用最广泛的 CSS2.1 规范中,各浏览器虽然对此规则均支持,但支持的细节有所区别。
IE 从 4.0 开始支持 '@font-face' ,使用了 Embedded OpenType (EOT) 格式。借助微软官方提供的字体压缩工具 'Microsoft WEFT(Web Embedding Fonts Tool)' 可以将 OpenType TT(.ttf) 格式的字体压缩至较小的体积,压缩后的类型即 .eot 格式。.eot 格式的字体仅被 IE 所支持。而到目前正式发布的最新版本的 IE8 也仍然仅支持 .eot 格式的字体。
IE 同样不支持 '@font-face' 规则中 src 描述中使用 format 提示所引用字体文件的格式。这将导致 '@font-face' 规则认为 src 描述定义错误而失效。
在互联网上随机找到一个 TrueType 字体 'Cherl',通过 'Microsoft WEFT' 将 'Cherl' 字体文件转换为 .eot 格式。或者通过开源的转换工具 'ttf2eot' 进行字体格式转换。
接下来就可以在 IE 中以类似 CSS3 草案中提到的格式定义 '@font-face' 规则。如:
<style>
@font-face {
font-family: Cherl;
src: url(cherl.eot);
}
</style>
这时就可以通过为声明设定 font-family: Cherl
来应用自定义的字体。
更多资料参考:
- http://www.w3.org/Submission/EOT/
- http://en.wikipedia.org/wiki/Embedded_OpenType
- http://msdn.microsoft.com/en-us/library/ms530757(VS.85).aspx
从 Firefox 3.5 Chrome 3.0 Safari 3.1 Opera 10 开始,其他非 IE 的主流浏览器均提供了对 '@font-face' 规则的支持。相比 IE 中所支持的微软私有的 .eot 格式,这些浏览器则提供了对使用范围更广泛、更常见的 TrueType 与 OpenType 格式的支持。
'@font-face' 规则的定义格式与 IE 中类似,但是支持 CSS3 草案中所描述的 format 提示参数等。
<style>
@font-face {
font-family: Cherl;
src: url(cherl.ttf);
}
</style>
更多资料参考:
- https://developer.mozilla.org/en/css/@font-face
- http://developer.apple.com/safari/library/documentation/appleapplications/reference/SafariCSSRef/Articles/OtherStandardCSS3Features.html#//apple_ref/doc/uid/TP40007601-SW2
- http://my.opera.com/ODIN/blog/font-face-web-fonts-resources
非 IE 浏览器对其他一些字体格式的支持
Chrome Safari Opera 在 TrueType 与 OpenType 字体格式之外,还支持 SVG 字体。通过 SVG 中的 FONT 元素及其他相关元素可以在 SVG 文件中定义字体。如:
<!doctype html>
<html>
<head>
<style>
@font-face {
font-family: ubuntu;
src: url(UbuntuTitleBold.svg#UbuntuTitleBold) format("svg");
}
#webfont {
font: 24px/150% ubuntu;
width: 300px;
}
</style>
</head>
<body>
<div id="webfont">The quick brown jumps over the lazy dog. 1234567890</div>
</body>
</html>
SVG 字体范例:UbuntuTitleBold.svg
目前 IE 和 Firefox 尚不支持此格式,在 Chrome Safari Opera 中效果如下:
SVG 字体转换:http://xmlgraphics.apache.org/batik/tools/font-converter.html
更多资料参考:
此外,Firefox 3.6 开始,又增加了一种字体格式支持 —— WOFF(Web Open Font Format,开放式字体规范)。WOFF 由字体设计师 Erik van Blockland、Tal Leming 和 Mozilla 的 Jonathan Kew 主持设计,可以看作是 TrueType、OpenType 字体数据的简单重新封装,不过内建了压缩功能,因而体积更小、方便下载和传播。另外还支持元数据,所以厂商可以在他们的字体中加入相关识别信息。
WOFF 字体转换:http://people.mozilla.com/~jkew/woff/
更多资料参考:
- https://developer.mozilla.org/en/About_WOFF
- http://people.mozilla.com/~jkew/woff/woff-spec-latest.html
多种字体格式转换:http://www.fontsquirrel.com/fontface/generator
下面列表查看各浏览器对各种 Web 字体的支持情况:
IE6 IE7 IE8 | Firefox 3.5+ | Firefox 3.6+ | Chrome | Safari | Opera | |
---|---|---|---|---|---|---|
TrueType, OpenType | 不支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
Embedded OpenType | 支持 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
SVG Font | 不支持 | 不支持 | 不支持 | 支持 | 支持 | 支持 |
WOFF | 不支持 | 不支持 | 支持 | 不支持 | 不支持 | 不支持 |
解决方案
由于各浏览器对 '@font-face' 规则字体格式支持存在差异,若仅通过定义一个 '@font-face' 规则,可以通过 CSS hack 的方式在 IE、Firefox、Chrome、Safari、Opera 中得到相同的字体效果。
参考代码如下:
<!doctype html>
<html>
<head>
<style>
@font-face {
font-family: Cherl;
src: url(cherl.ttf);
src: url(cherl.eot)\9;
}
#webfont {
font: 24px/150% Cherl;
width: 300px;
}
</style>
</head>
<body>
<div id="webfont">The quick brown jumps over the lazy dog. 1234567890</div>
</body>
</html>
上面代码在各浏览器中的效果均为:
同时,Google 提供了一种创建在线字体(WebFont)的方式:http://code.google.com/intl/zh-CN/apis/webfonts/ 利用 Google 提供的 API,可以在任何页面中加入 WebFont,同时支持各种主流浏览器。
参见
知识库
相关问题
测试环境
操作系统版本: | Windows 7 Ultimate build 7600 |
---|---|
浏览器版本: | IE6 IE7 IE8 Firefox 3.6.6 Chrome 6.0.477.0 dev Safari 5.0 Opera 10.10 |
测试页面: | fontface.html svgfont.html |
本文更新时间: | 2010-07-08 |
关键字
font-face CSS 字体 自定义 font SVG TrueType OpenType WOFF EOT
百度 搜素 web 字体格式,一大把的案例,wcschool 里面 css3 字体 部分 有讲解怎么引用。
以上都TM 废话。
其实 需要某种字体兼容各种浏览器 就只要 ttf和 eot 就行,ttf很好下载,eot 一般不好转换,http://down.51cto.com/data/178142 这个 转换器 非常好,我测试 ok .
http://7sbrz8.com1.z0.glb.clouddn.com/51CTO下载-字体转换工具(测试OK).rar (我的七牛网盘下载)
RF1001: 各浏览器对 '@font-face' 规则支持的字体格式不同,IE 支持 EOT 字体,Firefox Safari Opera 支持 TrueType 等字体的更多相关文章
- [转]真正了解CSS3背景下的@font face规则
本文转自:http://www.zhangxinxu.com/wordpress/2017/03/css3-font-face-src-local/ by zhangxinxu from http:/ ...
- 使用@font-family时各浏览器对字体格式(format)的支持情况
说到浏览器对@font-face的兼容问题,这里涉及到一个字体format的问题,因为不同的浏览器对字体格式支持是不一致的,这样大家有必要了解一下,各种版本的浏览器支持什么样的字体,前面也简单带到了有 ...
- 如何让Ubuntu系统支持WebP图片格式
本文主要向大家介绍如何让 Ubuntu 系统支持查看 WebP 图片格式,以及如何将 WebP 转为 JPEG 或 PNG 图片格式的方法. 什么是WebP图片 Google开发并推出 WebP 图片 ...
- BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari 中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象
http://www.w3help.org/zh-cn/causes/BX2001 标准参考 无 问题描述 IE 支持使用 window.clipboardData 对象内的一系列方法访问系统剪贴板: ...
- 火狐firefox提示“内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式。”
火狐firefox浏览器打开网也是时提示“内容编码错误 无法显示您尝试查看的页面,因为它使用了无效或者不支持的压缩格式.” 今早一来打开用PHPCMS做的网站时就提示这个错误,用其他浏览器打开提示的是 ...
- BT9034: 仅 IE 和 Opera 支持 HTMLFrameElement 和 HTMLIFrameElement 的 document 属性
标准参考 根据 DOM-2 中的描述,HTMLFrameElement 和 HTMLIFrameElement 都没有 'document' 属性. 关于 HTMLFrameElement 对象的详细 ...
- safari不支持new Date函数
最近在做移动Web的时候,在PC上用Chrome调试都成功了,但是在iPhone上真机一测就出现了奇怪的问题.经过一系列调试发现是日期相关的地方出现了问题.起初怀疑是生产环境的问题,但用Mac版的sa ...
- 支持10种格式的 HTML 表格导出 jQuery 插件
HTML 表格导出 jQuery 插件可以帮助用户导出 HTML 表格到 JSON.XML.PNG.CSV.TXT.SQL.MS-Word.MS-Excel.MS-PowerPoint 和 PDF 格 ...
- 各种浏览器(IE,Firefox,Chrome,Opera)COOKIE修改方法[转]
各种浏览器(IE,Firefox,Chrome,Opera)COOKIE修改方法[转] 网站通过 Cookie 保存了我们访问网站的信息,在不同的浏览器中修改 Cookie 可以如下操作: Firef ...
随机推荐
- Visual Studio中开发
如何在Visual Studio中开发自己的代码生成器插件 Visual Studio是美国微软公司开发的一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代 ...
- linuxc_螺纹锁紧pthread_mutex_t
在实际执行过程中的线程,我们经常需要同步多线程. 然后你可以使用互斥锁来完成任务:在使用过程中互斥锁,有pthread_mutex_init,pthread_mutex_destory,pthread ...
- 详谈socket请求Web服务器过程(转)
最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生. 而有人或许会问: ...
- [Linux]于Mac在配置Linuxserver安装Nginx+PHP
Linux 安装Debian系统 我安装的是Debian7.5的系统,Debian的软件包管理和升级十分方便,并且系统也非常稳定. 安装盘能够去华中科技大学镜像.网易开源镜像站或者中国科技大学镜像下载 ...
- 颜色(color)转换为三刺激值(r/g/b)(干股)
//颜色转换 ##665522 - 三色值 + (UIColor *)setFontColorWithString:(NSString *)color { NSString *cString ...
- JUnit使用参数测试和一组测试
JUnit该参数测试和一组测试使用简单 参数测试 作为替代阵列int a0,a1,a2喜欢,当测试加法assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要測试 ...
- 【源代码】Set集合源代码剖析
注:下面源代码基于jdk1.7.0_11 Set集合事实上是对Map集合的封装,Map集合存储的是键值对,那么我们将值隐藏,不向外界暴露,这样就形成了Set集合. 相应Map集合的两个非常重要的实现H ...
- Java设计模式菜鸟系列(十三)建模和实现状态模式
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):同意对象在内部状态改变时改变它的行为,对象看起来好像 ...
- NSIS:检查某注册表键是否存在
原文NSIS:检查某注册表键是否存在 ;定义注册表主键!define HKEY_CLASSES_ROOT 0x80000000!define HKEY_CURRENT_USER ...
- SQL Server 2012 复制(发布订阅的研究)
原文:SQL Server 2012 复制(发布订阅的研究) 已实现发布订阅功能,可以实现局域网内双击备份. 一.注意事项: a) 使用[事务复制]功能 b) 必须是相同的SqlServer 帐号和密 ...