正在加载...
欢迎订阅本站RSS,RSS地址:http://feed.css9.net。选择您使用的阅读器:Google Reader鲜果抓虾

字体使用是网页设计中不可或缺的一部分。经常地,我们希望在网页中使用某一特定字体,但是该字体并非主流操作系统的内置字体,这样用户在浏览页面的时候就有可能看不到真实的设计。美工设计师最常做的办法是把想要的文字做成图片,这样做有几个明显缺陷:1. 不可能大范围的使用该字体;2. 图片内容相对使用文字不易修改;3. 不利于网站SEO(主流搜索引擎不会将图片alt内容作为判断网页内容相关性的有效因素)。网络上有一些使用sIFR技术、或javascript/flash hack的方法,但实现起来或繁琐,或有缺陷。下面要讲的是如何只通过CSS的@font-face属性来实现在网页中嵌入任意字体。

【第一步】

获取要使用字体的三种文件格式,确保能在主流浏览器中都能正常显示该字体。

  • .TTF或.OTF,适用于Firefox 3.5、Safari、Opera
  • .EOT,适用于Internet Explorer 4.0+
  • .SVG,适用于Chrome、IPhone

下面要解决的是如何获取到某种字体的这三种格式文件。一般地,我们在手头上(或在设计资源站点已经找到)有该字体的某种格式文件,最常见的是.TTF文件,我们需要通过这种文件格式转换为其余两种文件格式。字体文件格式的转换可以通过网站FontsQuirrelonlinefontconverter提供的在线字体转换服务获取。这里推荐第一个站点,它允许我们选择需要的字符生成字体文件(在服务的最后一个选项),这样就大大缩减了字体文件的大小,使得本方案更具实用性。

【第二步】

获取到三种格式的字体文件后,下一步要在样式表中声明该字体,并在需要的地方使用该字体。

字体声明如下:

@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>

下面是我通过上面两步做的示例:

云为素食

京城有同窗,相约素食阁。

听者犹未尽,言者语已多。

满座皆友朋,畅谈何民科。

禅中寄小语,慎言且柔和。

上面文中的字体用的是本博客之前发布的一款钢笔行书字体,喜欢的可以去下载。

下载该示例的源代码: 网页嵌入字体示例 [下载次数:478]

延伸阅读:

  1. Web设计字体尺寸转换速查表
  2. 一个简单的、循序渐进的CSS幻灯片教程
  3. 21款Web设计手写字体
  4. 使用CSS和JQuery轻松切换网页显示样式
  5. 简洁易用的html编辑器——TinyEditor
  6. CSS中文速查表(CSS Cheat Sheet)
  7. 通过CSS Sprites技术仅一张图片实现动感菜单
  8. 一款难得的钢笔行书简体字体


版权声明:

本站内容受著作权法保护。个人网站、blog转载时请遵循 “署名-非商业用途-保持一致” 的创作共用协议;商业网站或媒体未授权不得复制本站内容。

友情提示:

如对本文有任何疑问,或在示例的使用中遇到问题,或有好的建议,欢迎在下面留言共同学习,有问必答。

: http://css9.net/css-font-face-solution/

本文相关评论 - 才 52 条评论
2009-12-09 09:31:35

酷! 又学到一招

jon
2009-12-09 09:46:12

效果非常棒!

2009-12-09 14:11:04

呵呵,不错,网页可以更生动了

2009-12-09 14:32:23

太NB了啊,这可算是填补了空白了

2009-12-09 14:32:36

酷!转走了

2009-12-09 15:45:23

Good! Thanks

2009-12-09 15:49:33

请问字体上传到空间哪里?

2009-12-09 18:07:04

如果@font-face声明写在样式表里面,url里面的字体文件地址是相对于样式表的相对地址。如果二者路径相同,url里面的写法就如同文中一样即可。

如果@font-face声明写在了网页文件里,那么url里面的字体文件地址可以写http://开头的全路径

草草
2009-12-09 18:01:20

不好意思
你这个方法兼容不了FF
让你失望了

2009-12-09 18:08:22

示例在你那边FF里运行不正常?

我这边几个浏览器都做过测试的。

2009-12-10 09:48:42

昨天忘记了Firefox的版本问题,这个方法只能在FF 3.5+ 上生效。

可能你的是FF 3.0 或更低版本。

MyZ
2009-12-10 14:17:47

刚测过, FF3可以…

JJJ
2009-12-09 21:17:39

第一步,在“Add Fonts”处,上传已有字体文件;
第二步,在“Agreement”处,勾选;
第三步,在“Alt Font Formats”后的三项全部勾选;
第四步,如果需要的话,在“Subsetting”处勾选后选择需要的字符集;
第五步,点击按钮下载生成的压缩包。

如果正确的话,压缩包中应当包含转换好的三个字体文件,及示例html和css文件

2009-12-10 08:35:41

恩!真的很不错啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。

k4u_fish
2009-12-10 08:39:57

非常非常棒的方法,学习了

2009-12-10 09:45:17

HTML5
以前也接触过sIFR,但是在中文上使用最大的问题就是字体文件很大。所以一直不看好中文的页面嵌入字体。
这个也存在同样的问题,虽然可以自己选字符,但是不可能我猜要用到哪些字一个一个选吧,如果出现没用到的再去生成一遍字体???
所以这个对英文网站很实用,对于中文嘛,只是看起来很美好,少量特殊格式还是图片来得实际点。

PS:当然到带宽达到一定程度的时候,问题就不存在了。

2009-12-10 09:57:42

对于中文字体,确实有你说的问题。 不过在实际应用中,我们一般不会把某种特殊字体作为页面内容的主要字体,更多的是应用在标题、菜单、宣传语等场景,它们的文字一般会比较少(但是文字的内容对于网站SEO确很重要,做成图片不大好)。在这种情况下选择需要的字符生成字体文件,一般不会太大(几K到几十K)。这样做有时还是值得的。
PS: 感觉短时间内还是别指望国内的宽带
PPS:我在想有没有让字体文件预先加载及缓存的实现方法,这样会更好些。

2009-12-10 10:04:49

博主,我用FontsQuirrel 网站 ,什么都填写好了,就是没有找 第五步,点击按钮下载生成的压缩包。难道是我的浏览器的问题,纠结也…

2009-12-10 10:20:38

参考下我前面的回复 http://css9.net/css-font-face-solution/#comment-939
猜想你是 第二项 中的Agreement(同意条款)处没有打钩

Tom
2009-12-10 12:23:12

不错,但是我怎么在在chrome下看是没效果的?看到的还是默认字体!

Tom
2009-12-10 12:29:36

啊,sorry!从这里下载的文档用chrome看是能看到效果的,但是我是从蓝色理想网站上看到的,用chrome运行代码 看不到效果,为什么?

2009-12-10 13:38:35

我刚去blueidea上,在chrome里运行代码,也是有效果的。还没想到你那边问题出在哪里。

Tom
2009-12-10 16:21:50

我还是不行,我的我的chrome版本是3.0.195.33。还有个问题,就是用chrome运行blueidea上的代码 弹出的页面不能查看源文件(就是例子的那个页面不能看源代码)!

2009-12-14 13:55:09

我的好像也不行,是不是和空间也有关系啊?

2009-12-14 14:15:28

有地址可以看么,我测试一下

2009-12-15 09:20:00

地址是:http://eiziaftp.v31.30id.net/font-test/index.html
将你的源代码拷贝了一下。除了chrome不行以外,其他的浏览器都可以。
PS:chrome在本地测试是可以的。且看这个也没有什么问题。

2009-12-15 10:43:48

你这个地址在我的chrome里是正常的耶。应该不会和chrome的版本有关吧,我的是最新版4.0.266.0。

截图:

2009-12-15 11:44:27

试了一下,果然和chrome有关>_<!

(评论已经达到最大深度!)
riant
2009-12-16 23:21:36

运行代码之后的页面一般都是没法再查看源代码的了吧?——一直这样认为的。

2009-12-17 08:54:30

如果类似blueidea上面的运行确实是看不到源代码的。如果运行我提供的示例文件,是可以的。

2009-12-10 14:08:32

很奇怪,“第五步,点击按钮下载生成的压缩包。”,FontsQuirrel上的确找不到下载按钮!

我确定我已经勾选“Agreement”了…………还是不行。

2009-12-10 19:24:45

第一步上传字体文件有没有做?

色流
2009-12-11 08:20:02

很确定,当然是上传完字体后才开始其他操作的。

我想转化微软雅黑,但是一直不成功。现在我想或许是因为字体文件过大(17MB)所引起的原因吧……

2009-12-12 14:06:41

我测试过了,确实有一个文件大小的限制,这个比较郁闷。

2009-12-11 12:47:18

这招非常不错,学习了

2009-12-15 14:18:19

[...] 发现个能兼容主流浏览器的方法:见http://css9.net/css-font-face-solution/ 11月 9th, 2009  前端技术   css,font-face   Kaixin001 链接文字下划线贴住问题研究滑动门真正的魅力超级无敌各种浏览器css hackIE下边框(border-bottom)消失显示不全解决方法拥有自己的css resetIE6到底支持!important吗css中的哥德巴赫猜想word-break:break-all和word-wrap:break-word该怎么用让IE6崩溃的一句代码 ← 中国式英语翻译(巨雷)美女时钟3d文字特效 → [...]

jing
2009-12-18 19:54:41

这个很有用哎。

卓山
2009-12-22 22:07:22

老兄,你真的很牛,我正要解决,没想到你已经搞定了,世界是因为有你这样的能人才越来越美啊哪个好好。解决的非常好,佩服!

2009-12-22 23:06:44

呵呵,老兄抬举了,这个方案是从国外站点看到的,我不过是引入进来而已。

2009-12-27 19:05:11

一直想找的,呵呵,偶然就看到了

2009-12-28 15:20:35

这个功能我很喜欢,收藏下次用到!

2010-01-06 13:34:24

英文字体还好……中文字体就杯具了吧……放个雅黑就完了……哈哈~

2010-01-06 15:43:56

中文字体确实不像英文效果好,而且咱们国内带宽环境还那么差劲。

不过中文可以选择自己要使用的文字生成字体文件, 还有一定的可行性。

逍涯
2010-01-30 17:46:40

我的只能显示个别字,为啥大部分字体都不能显示啊

2010-02-08 11:23:39

需要根据需要重新生成字体,建议再仔细看一下文章

2010-02-07 21:50:07

字体命名不要是中文!~!!!!!!!

嘉年华
2010-02-19 20:43:37

你好,这个很不错,但是我想加到wordpress的主题Css中去,不知道
将@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’);
}
加到哪个CSS中,有什么讲究?

2010-02-19 22:14:45

css上没有什么讲究的,可以放在主题引用的任意一个css文件中。

不过要注意的是@font-face的声明要在该字体使用之前。

阳光
2010-03-17 17:33:32

您好,麻烦您发一份测试源码给我,我在本地自己研究了半天总是失败!

阳光
2010-03-17 17:35:12

我的邮箱38148660@qq.com ,非常感谢

阳光
2010-03-17 17:37:37

我的邮箱381486630@qq.com ,非常感谢
不好意思,刚少了个3,麻烦了

 填写6 + 9的结果