在网页中嵌入任意字体的解决方案 (insert any font)
字体使用是网页设计中不可或缺的一部分。经常地,我们希望在网页中使用某一特定字体,但是该字体并非主流操作系统的内置字体,这样用户在浏览页面的时候就有可能看不到真实的设计。美工设计师最常做的办法是把想要的文字做成图片,
?
这样做有几个明显缺陷:
1. 不可能大范围的使用该字体;
2. 图片内容相对使用文字不易修改;
3. 不利于网站SEO(主流搜索引擎不会将图片alt内容作为判断网页内容相关性的有效因素)。
?
网络上有一些使用sIFR技术、或javascript/flash hack的方法,但实现起来或繁琐,或有缺陷。下面要讲的是如何只通过CSS的@font-face属性来实现在网页中嵌入任意字体。
?
【第一步】
获取要使用字体的三种文件格式,确保能在主流浏览器中都能正常显示该字体。
?
1. @font-faceCSS3的@font-face属性(事实上CSS2中就已引入),为我们带来了一些希望,而Firefox 3.5新增的对@font-face的支持,让我们离这个希望更进了一些。
?
到现在为止,已经有Safari、Chrome、Opera 10和Firefox 3.5支持@font-face了,比较意外的是,IE系列浏览器也部分支持该属性。Mozilla旗下的其它产品,SeaMonkey 2 和Thunderbird 3 也支持该属性。
?
浏览器兼容性浏览器最低版本支持字体Internet Explorer4.0只支持OpenType字体(eof格式)Firefox (Gecko)3.5 (1.9.1)TrueType(ttf格式)和OpenType 字体Opera10.0TrueType和OpenType 字体Safari (WebKit)3.1 (525)TrueType和OpenType 字体?
从表中可以看出,IE系浏览器不支持TTF格式的字体,只支持eof格式,不过,微软官方发布了一个WEFT工具,可以将TTF转化为EOF,需要的朋友可以去下载使用。
?
可以使用的样式如下:
下面要解决的是如何获取到某种字体的这三种格式文件。一般地,我们在手头上(或在设计资源站点已经找到)有该字体的某种格式文件,最常见的是.TTF文件,我们需要通过这种文件格式转换为其余两种文件格式。
?
字体文件格式的转换可以通过网站FontsQuirrel或onlinefontconverter提供的在线字体转换服务获取。这里推荐第一个站点,它允许我们选择需要的字符生成字体文件(在服务的最后一个选项),这样就大大缩减了字体文件的大小,使得本方案更具实用性。
?
【第二步】
获取到三种格式的字体文件后,下一步要在样式表中声明该字体,并在需要的地方使用该字体。
字体声明如下:
?
??
从中我们可以看出来,使用Typeface只需要着简单的几步就可以在页面中使用嵌入字体了。
typeface资源:下载的字体(该页面可以包含一个字体生成器)typeface查看演示cufoncufon是一个比较新的技术,被定位为有价值的sIFR替代方案,它有很多优势:
无需浏览器插件——被浏览器原生支持;兼容性——兼容各个主流浏览器易用—— 无需配置速度—— 快速渲染大量字体
cufon的原理:cufon通过生成器将字体文件转化为SVG字体,再将其转换为VML文件,这对IE很重要,因为IE原生支持VML文件。最后,使用复杂的JavaScript函数将VML文件编码为JSON文件(typeface的原理与此类似)。如下图所示:
?
?
这样做有很多好处:
与加载一个字体文件,你只需要加载一些js文件就可以;客户端无需再次手工编码;外部js文件直到加载完成才会被执行,这可以让我们实现无闪烁的干净的替换。压缩率高。相对于字体文件,可压缩掉60-80% 。
cufon的用法:cufon的用法与typeface类似,需要加载一个库文件和字体文件。而与typeface不同的是,你需要使用js初始化cufon:
?
<script type="text/javascript">Cufón.replace('h2', { fontFamily: 'Qlassik Medium' }); </script>??
这与typeface的在样式中定义字体很不一样。
cufon资源:cufon项目cufon演示cufon生成器wp-cufon 一个使用cufon的wordpress插件cufon和typeface.js对比:
CufónTypeface.jsFile size14.0kb (压缩后)16.3kb (未压缩)支持的浏览器Firefox 1.5+, Safari 3+, Opera 9.5+, Google Chrome 和 Internet Explorer6+Firefox 1.5+, Safari 2+, and Internet Explorer 6+, 最新版已经支持IE8支持的字体类型.ttf, .otf, PFB, postscript.ttf支持的字体样式font-size, font-style, font-weight, line-height, text-shadow, colorfont-size, font-style, font-weight, font-stretch, letter-spacing, line-height可选文字?尚不支持尚不支持?
从这个对比中可以看出来,两者并没有太大的不同,cufon支持更多的浏览器和字体类型,而typeface支持更多的字体样式。实际应用中貌似typeface方便一些,可以直接在样式中定义字体,而cufon则有总体文件大小方面的优势。具体用哪一个,看你自己的喜好吧。
总结事实上,sIFR、typeface.js和cufon都是目前常说的文本替换技术,这些技术都可以用来替换@font-face,并且实现更好的浏览器兼容性。但是每种技术都不是完美的:
@font-face最简单,虽然大部分浏览器也都支持了,但是其浏览器兼容性并不是很完美,对IE还需要eof字体的特殊支持,而且对于中文字体来说,一般都很大,这会占用很大的页面加载时间和服务器流量。sIFR是兼容性和可用性最好、对SEO友好的一种方案,但也是实现起来最复杂的,而且需要浏览器支持Flash插件。typeface和cufon都是利用在IE中渲染VML,而在非IE浏览器中使用canvas的方式实现“伪”字体的,他们使用起来相对简单,但是可用性和用户体验以及SEO都不是很理想。版权问题是一个很重要的问题,无论你使用哪种技术,都需要考虑文字的授权。
所以,使用哪种方案,要看你的需求和喜好,或许你宁愿切更多的图片也不愿使用这些技术?
?
?
?