字体使用是网页设计中不可或缺的一部分。经常地,我们希望在网页中使用某一特定字体,但是该字体并非主流操作系统的内置字体,这样用户在浏览页面的 时候就有可能看不到真实的设计。美工设计师最常做的办法是把想要的文字做成图片,
这样做有几个明显缺陷:
1. 不可能大范围的使用该字体;
2. 图片内容相对使用文字不易修改;
3. 不利于网站SEO(主流搜索引擎不会将图片alt内容作为判断网页内容相关性的有效因素)。
网络上有一些使用sIFR技术、或 javascript/flash hack的方法,但实现起来或繁琐,或有缺陷。下面要讲的是如何只通过CSS的@font-face属性来实现在网页中嵌入任意字体。
【第一步】
获取要使用字体的三种文件格式,确保能在主流浏览器中都能正常显示该字体。
CSS3的@font-face属性(事实上CSS2中就已引入),为我们带来了一些希望,而 Firefox 3.5新增的对@font-face的支持,让我们离这个希望更进了一些。
到现在为止,已经有Safari、 Chrome、Opera 10和Firefox 3.5支持@font-face了,比较意外的是,IE系列浏览器也部分支持该属性。Mozilla旗下的其它产品,SeaMonkey 2 和Thunderbird 3 也支持该属性。
Internet Explorer | 4.0 | 只 支持OpenType字体(eof格式) |
Firefox (Gecko) | 3.5 (1.9.1) | TrueType(ttf格式)和OpenType 字体 |
Opera | 10.0 | TrueType 和OpenType 字体 |
Safari (WebKit) | 3.1 (525) | TrueType和OpenType 字体 |
从表中可以看 出,IE系浏览器不支持TTF格式的字体,只支持eof格式,不过,微软官方发布了一个WEFT工具,可以将TTF转化为EOF,需要的朋友可以去下载使用 。
可以使用的样式如下:
下面要解决的是如何获取到某种字体的这三种格式文件。一般地,我们在手头上(或在设计资源站点已经找到)有该字体的某种格式文件,最常见的 是.TTF文件,我们需要通过这种文件格式转换为其余两种文件格式。
字体文件格式的转换可以通过网站FontsQuirrel 或onlinefontconverter 提 供的在线字体转换服务获取。这里推荐第一个站点,它允许我们选择需要的字符生成字体文件(在服务的最后一个选项),这样就大大缩减了字体文件的大小,使得 本方案更具实用性。
【第二步】
获取到三种格式的字体文件后,下一步要在样式表中声明该字体,并在需要的地方使用该字体。
字体声明如下:
@font-face { font-family: 'fontNameRegular'; src: url('fontName.eot'); src: local('fontName Regular'), local('fontName'), url('fontName.woff') format('woff'), url('fontName.ttf') format('truetype'), url('fontName.svg#fontName') format('svg'); } /*其中fontName替换为你的字体名称*/
在页面中需要的地方使用该字体:
p { font: 13px fontNameRegular, Arial, sans-serif; } h1{font-family: fontNameRegular}
或者
<p style="font-family: fontNameRegular">掬水月在手,落花香满衣</p>
其他方法:
sIFR并非一种新技术,而是已经存在并被使用很多年了。sIFR是一种很有用也很好用的文本替换技术,通过 Flash+JS+CSS将网络字体嵌入到页面中。
考虑到网上已经有很多资源,本文就不再赘述,想要了解的朋友可以参考一下文章:
Typeface 被认为是替代 SIFR的最佳方案,相对于sIFR,Typeface少了Flash的应用,使用纯JS来嵌入相关字体,而且用法也很简单:在页面中引入相应的js文件 就OK了。
<html> <head> <!-- 加载所有的样式先 --> <link rel="stylesheet" type="text/css" ref="/style.css"> <!-- 再加载typeface.js 库文件和typeface.js字体文件--> <script type="text/javascript" src="typeface-0.10.js"></script> <script type="text/javascript" src="helvetiker_regular.typeface.js"></script> </head> <body> <!-- 继续并使用CSS指定typeface.js 字体 --> <div class="myclass typeface-js" style="font-family: Helvetiker"> 文本文本... </div> </body> </html>
从 中我们可以看出来,使用Typeface只需要着简单的几步就可以在页面中使用嵌入字体了。
cufon是一个比较新的技术,被定位为有价值的sIFR替代方案,它有很多优 势:
cufon通过生成器将字体文件 转化为SVG字体,再将其转换为VML文件,这对IE很重要,因为IE原生支持VML文件。最后,使用复杂的JavaScript函数将VML文件编码为 JSON文件(typeface的原理与此类似)。如下图所示:
这 样做有很多好处:
cufon的用法与typeface类似,需要加载一个库文件和字体文件。而与typeface不同的是,你需要使用js初始化 cufon:
<script type="text/javascript"> Cufón.replace('h2', { fontFamily: 'Qlassik Medium' }); </script>
这 与typeface的在样式中定义字体很不一样。
14.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, color | font-size, font-style, font-weight, font-stretch, letter-spacing, line-height |
尚 不支持 | 尚不支持 |
从这个对比中可以看出来,两者并没有太大的不 同,cufon支持更多的浏览器和字体类型,而typeface支持更多的字体样式。实际应用中貌似typeface方便一些,可以直接在样式中定义字 体,而cufon则有总体文件大小方面的优势。具体用哪一个,看你自己的喜好吧。
事实上,sIFR、 typeface.js和cufon都是目前常说的文本替换技术,这些技术都可以用来替换@font-face,并且实现更好的浏览器兼容性。但是每种技 术都不是完美的:
所以,使用哪种方案,要看你的需求和喜好,或许你宁愿 切更多的图片也不愿使用这些技术?