CSS3新特性(04):@font-face

@font-face是CSS3新特性中的一个模块,今天就来介绍下它。它主要是把自定义的Web字体嵌入到你的网页中。说白了就是可以帮助你在网页上使用漂亮的特殊字体,即非Web安全字体.

而不用担心,你的网页发布以后,浏览者的电脑万一没安装这个字体就坏事了的情况。一般不是专业从业人员,如设计师,普通网友的字体库是不会装太多字体的。所以@font-face就派上用处了。

@font-face怎么用?

(1)@font-face的语法:

@font-face {
    font-family: 'Your Web Font Name';
    font-weight:normal;
    src: url('fonts/YourWebFontName.eot');
    src: url('fonts/YourWebFontName.eot') format('eot'),
         url('fonts/YourWebFontName.woff2') format('woff2'),
         url('fonts/YourWebFontName.woff') format('woff'),
         url('fonts/YourWebFontName.ttf') format('ttf'),
         url('fonts/YourWebFontName.svg') format('svg');
}
 
p { font-family: 'Your Web Font Name', serif; }

当然还有这种写法的:

@font-face{
 
font-family:'Your Web Font Name';
font-weight:normal;
src:url('YourWebFontName.eot?')format('eot')/*IE*/,
src:local('YourWebFontName'),
    url('fonts/YourWebFontName.woff2') format('woff2'),
    url('fonts/YourWebFontName.woff') format('woff'),
    url('fonts/YourWebFontName.ttf') format('ttf'),
    url('fonts/YourWebFontName.svg') format('svg');/*Not for IE*/
}
p { font-family: 'Your Web Font Name', serif; }

(2)语法解析YourWebFontName:指你自定义字体的名称,最好使用你下载字体的默认名称,他将被引用到你Web元素中的font-family里。url:里面填你下载要用字体的绝对或相对地址。比如url('../gebz/pts55f-webfont.woff')。format('woff'):括号中填字体的格式,主要用于帮助浏览器识别。一般有ttf,otf,woff,eot,svg几种常见字体格式,这个下面会介绍)。

第二种写法中的local是一种hack的手法。目的是保护IE浏览器。如果没有这句,IE会尝试将第二个src描述符的值读作一个路径,并向服务器发出一个额外无用的请求。特地写了第一个src的目的也是为了保证IE能读到正确路径。具体可参看《CSS3实用指南》ZM. Gillenwater. 页码P112-P114。

另外这种写法在Android系统中会有BUG,感兴趣的同学可以看看《BestPracticeFor@Font-Face》。改进方法可以写两个@font-face,一个兼容IE,另一个非IE。比如:

@font-face{
 
font-family:'Your Web Font Name';
font-weight:normal;
src:url('YourWebFontName.eot?')format('eot')/*IE*/,
}
 
@font-face{
 
font-family:'Your Web Font Name';
font-weight:normal;
src: url(//:) format("no404"),
     url('fonts/YourWebFontName.woff2') format('woff2'),
     url('fonts/YourWebFontName.woff') format('woff'),
     url('fonts/YourWebFontName.ttf') format('ttf'),
     url('fonts/YourWebFontName.svg') format('svg');/*Not for IE*/
 
}
p { font-family: 'Your Web Font Name', serif; }

url(//:)format("no404")是一种Bulletproof写法,感兴趣的同学可看《New@Font-FaceSyntax:Simpler,Easier》一文。另外,为了使@font-face达到更多的浏览器支持,PaulIrish写了一个独特的@font-face语法叫《Bulletproof@font-face》

字体格式以及支持的浏览器

  • TureType(.ttf)格式
    (.ttf)字体是Windows和Mac的最常见字体,是一种RAW格式,因此他不为网站优化,支持这种字体的浏览器有:
    (IE9+,FF3.5+ Chrome4+,Safari3+,Opera10+,IOSMobileSafari4.2+)
  • OpenType(.otf)格式
    (.otf)字体被认为是一种原始的字体格式,其内置在TureType的基础上,所以也提供了更多的功能,支持这种字体的浏览器有:
    (FF3.5+ ,Chrome4.0+,Safari3.1+,Opera10.0+,IOSMobile Safari4.2+)
  • Web Open Font Format(.woff)格式
    (.woff)字体是Web字体中最佳格式,可以看作是 TrueType、OpenType 字体数据的简单重新封装,不过内建了压缩功能,因而体积更小、方便下载和传播。另外还支持元数据,所以厂商可以在他们的字体中加入相关识别信息。支持这种字体的浏览器有:
    (IE9+,FF3.5+,Chrome6+,Safari3.6,Opera11.1+)
  • Embedded Open Type(.eot)格式
    (.eot)字体是IE的专用字体,可以从TrueType创建此格式字体,支持这种字体的浏览器有:(IE4+)
  • SVG(.svg)格式
    (.svg)字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有:
    (Chrome4+,Safari3.1+,Opera10.0+,ISO MobileSafari3.2+)
内容 IE6IE7IE8 FF3.5+ Chrome Safari Opera
.ttf,.otf 不支持 支持 支持 支持 支持
.eot 支持 不支持 不支持 不支持 不支持
.svg 不支持 不支持 支持 支持 支持
woff 不支持 支持 支持 支持 支持

由上面可以得出:.eot + .ttf /.otf + svg + woff = 所有浏览器的完美支持。
当然这些不同的字体格式哪里来呢?网上有一些专门的字体格式转换的网站。

在线字体格式转换网站

(1)Fontsquirrel
主要是英文字体转换,上传你已有的字体格式以后,进行转换就可以得到一个装有多种字体的压缩文件,解压缩后,里面除了@font-face所需要的众字体格式外,还带有一个DEMO文件,不明白怎么使用的,可以看一下这个DEMO文件,但千万别复制DEMO文件,要不然我上面的语法解析就白讲了。

上传你的字体文件,然后选择中间的OPTIMAL推荐最佳格式,然后就可以转换了。

(2)EveryThingFonts
当上面的Fontsquirrel网登不上用不了时,可以选择在EveryThingFonts网试一试,可以下载中文字体,是我新发现的在线字体格式转换网站,也是我最近常用的工具,非常推荐,比Fontsquirrel网稳定。鼠标滑块将No滑为Yes,点击Pick Font File上传你已有的字体,然后点击Convert进行转换即可。

@font-face使用小结

如果你的项目中是英文网站,而且项目中的LOGO,TAGS等应用到较多的特殊字体效果,则比较建议用@font-face,但如果是中文网站,还是使用图片比较合适,因为加载英文字体和图片没多大区别,但是加载中文字体可能会影响性能优化,因为中文一套字体一般要3-6M,这样的庞然大物嵌入网页上,结果可想而知,在页面加载完成前已经被关掉了。

当然,不是说中文就无法通过@font-face实现嵌入,但需要再麻烦一步:按需截取(根据文章所涉及到的文字生成小字库),中文的无论如何都要先截取一下的。如此便能最大程度地节约流量,将字体减到最小。

看到漂亮字体不知是啥字体咋办?

最后推荐一个用图片搜索字体的网站——求字网,你一定碰到过这样的情况,看到某个网站使用了很漂亮的字体,想知道是什么字体?除了可以查阅源代码获取,还可以将文字截成图片,放到求字网上去匹配搜索,当然我更建议使用源代码,因为有时求字网数据库不够全会找不到答案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 摘要:本篇文章包括(1)介绍@font-face(2)如何在网页中使用@font-face插入特殊字体(3)中文在...
    Masukio阅读 16,441评论 0 17
  • 字体转换工具:fontmin-app在线转换:web-fontmin 本文参考地址:CSS3 @font-face...
    丶Dahl阅读 773评论 0 1
  • font-face是css3中允许使用自定义字体的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中。到了今...
    Rin阳阅读 14,684评论 0 13
  • 基础知识 @font-face虽然是CSS3模块,但是IE4时代开始就已经支持了它,只不过跟现在CSS3的功能相比...
    microkof阅读 1,158评论 0 3
  • 标签(空格分隔): CSS3 @font-face的是一个CSS规则,允许在网站上使用特定的字体,即使她在访问者的...
    ahcj_11阅读 942评论 0 1