基礎(chǔ)知識(shí)
@font-face雖然是CSS3模塊,但是IE4時(shí)代開始就已經(jīng)支持了它,只不過跟現(xiàn)在CSS3的功能相比完全不可比。
先看看http://www.css88.com/book/css/rules/@font-face.htm
可以看出,各種瀏覽器對(duì)它的支持五花八門,所以,寫出一個(gè)全瀏覽器兼容的定義字體的代碼就很重要。
@font-face的本質(zhì)就是先定義,后使用?,F(xiàn)在我們先定義:
@font-face {
font-family: 'diyfont';
src: url('diyfont.eot'); /* IE9+ */
src: url('diyfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('diyfont.woff') format('woff'), /* chrome、firefox */
url('diyfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('diyfont.svg#fontname') format('svg'); /* iOS 4.1- */
}
這種寫法的原因是:瀏覽器會(huì)從前往后嘗試使用字體,優(yōu)先使用eot字體,如果不兼容瀏覽器,就使用woff字體,依然不兼容就使用ttf字體,還不兼容就使用svg字體。
這里需要介紹一下eot格式、ttf格式、woff格式、svg格式。
.eot ,Embedded Open Type,主要用于早期版本的IE,是其專有格式,帶有版權(quán)保護(hù)和壓縮。
.ttf ,TrueType,在操作系統(tǒng)里更為常見,在web上使用的話,是為了兼容早期僅支持TTF和OTF的瀏覽器。由于體積比較大,還需要服務(wù)器額外壓縮。
.otf,OTF擴(kuò)展名的O表示OpenType - PostScript字體,采用的是PostScript曲線,支持OpenType高級(jí)特性。
.woff ,Web Open Font Format,可以看作是ttf的再封裝,加入了壓縮和字體來源信息,通常比ttf小40%。也是當(dāng)前web字體的主流格式。
.woff2 ,Web Open Font Format 2.0,相比woff最大的優(yōu)化應(yīng)該是加強(qiáng)了字體的壓縮比。目前 支持的瀏覽器 只有正在互飆版本號(hào)的Chrome和Firefox。
.svg,基于SVG字體渲染的一種格式,支持這種字體的瀏覽器有【Chrome4+,Safari3.1+,Opera10.0+,iOS Mobile Safari3.2+】。
圖標(biāo)字體
我們看看著名的glyphicons-halflings圖標(biāo)字體庫都提供了哪些文件:

看來它提供全了。更著名的Font Awesome圖標(biāo)字體,提供了哪些文件呢?

那么glyphicons-halflings如何聲明呢?
@font-face {
font-family: 'Glyphicons Halflings';
src: url("../fonts/glyphicons-halflings-regular.eot");
src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),
url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"),
url("../fonts/glyphicons-halflings-regular.woff") format("woff"),
url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),
url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); }
再看看Font Awesome怎么聲明的:
@font-face {
font-family: 'FontAwesome';
src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),
url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),
url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),
url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),
url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
找到規(guī)律了吧,聲明的順序是:
1、先聲明字體家族的名稱。
2、單獨(dú)聲明一個(gè)資源,聲明eot。
3、再聲明一個(gè)資源,依次聲明eot?#iefix、woff2、woff、otf、ttf、svg#xxx。順序一定不要錯(cuò)。資源的格式是url('...') format('...')。
現(xiàn)在,我們研究一下怎么使用這兩個(gè)字體。其實(shí)字體的開發(fā)方會(huì)給你提供一個(gè)CSS文件,完全不用你自己考慮如何使用字體。大致如下:
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
content: "\002a";
}
......
當(dāng)你想使用一個(gè)圖標(biāo)文字的時(shí)候,只需要用一個(gè)span標(biāo)簽,加上兩個(gè)類,就可以使用了。
<span class="glyphicon glyphicon-asterisk"></span>
文字字體
現(xiàn)在我只想用一個(gè)文字字體,并不想用圖標(biāo)字體,怎么辦?
首先,我們要去找字體,比如從Google Web Fonts和Dafont.com尋找自己需要的字體。現(xiàn)在我從Dafont.com下載了一個(gè)“Lost in Wild”字體,這個(gè)字體長(zhǎng)相很囂張。我們?cè)囈辉嚒?/p>
我把壓縮包下載到本機(jī)服務(wù)器的www目錄,解壓,里面有otf和ttf兩種文件,分別為60KB和155KB。我先在HTML文件寫一段CSS規(guī)則:
@font-face {
font-family: 'Lost and Wild';
src: url('/lost_in_wild/Lost in Wild.otf') format('opentype'),
url('/lost_in_wild/Lost in Wild.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
.font-lostandwild {
font-family: 'Lost and Wild';
}
然后構(gòu)建一個(gè)簡(jiǎn)單的HTML文件,主要內(nèi)容是:
<p class="font-lostandwild">Too young, too simple, sometimes naive!</p>
打開頁面我們看看效果:

雖然看起來很亂,但是我們用起來是成功了。不過請(qǐng)注意,http://www.css88.com/book/css/rules/@font-face.htm 這里已經(jīng)明確顯示,IE6-8是不支持otf/ttf字體的,所以如果要兼容到IE8,你找的字體庫里面必須要含有.eot文件,如果沒有,要么找轉(zhuǎn)換工具做一個(gè).eot文件,要么就放棄這個(gè)字體庫。
轉(zhuǎn)換工具:
1、ttf2eot,這是一個(gè)node.js實(shí)現(xiàn)的庫,使用起來很簡(jiǎn)單。
2、微軟的WEFT 3.2,是一個(gè)程序,微軟出的程序的易用性不用懷疑。
最后,你可能會(huì)問,為啥沒有提中文網(wǎng)絡(luò)字體?中文字體由于體積大,一般都在5MB以上,所以不適合作為網(wǎng)絡(luò)字體使用。有些網(wǎng)站“強(qiáng)行”使用上了中文網(wǎng)絡(luò)字體,用戶體驗(yàn)很差,因?yàn)槟銊偞蜷_網(wǎng)頁的時(shí)候,5MB的字體文件還沒后臺(tái)下載下來,所以你看到的字體都是默認(rèn)字體,等了10秒之后,后臺(tái)把字體下載下來,然后網(wǎng)頁會(huì)“一抖”,其實(shí)是瀏覽器重新渲染一遍字體,然后你才能看到正確的字體。所以,如果你找到了一款2M以內(nèi)的中文字體,就可以嘗試用用,否則沒必要為了字體加大網(wǎng)頁體積,你還有一種方法是把字寫到圖里面,貼一張圖即可。