[聊一聊系列]聊一聊iconfont那些事兒

歡迎你們收看聊一聊系列,這一套系列文章,能夠幫助前端工程師們瞭解前端的方方面面(不只僅是代碼):
https://segmentfault.com/blog/frontenddrivercss

1. 從FONT-FACE提及

要想了解iconfont,得從一個新的css3規則提及。css3中,新增了一種樣式規則,@font-face,這個規則能夠用來引入自定義的字體,到客戶端。之前,咱們的字體只能放任客戶端的。由於用戶沒有安裝的話,咱們強制要求顯示也沒有辦法。
如今使用@font-face則能夠引入在web服務器上存放的字體文件,從而達到,可使用一些客戶端瀏覽器上不存在的字體,等到瀏覽器去訪問並渲染時,去下載font-face指定的字體。並命名爲咱們想要的字體。如圖1.1:html

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8" />
        <style>
            @font-face {
                font-family: myfont;
                src: url('./myfont.otf');
            }   
            .usefont {
                font-family: myfont;
            }   
        </style>
    </head>
    <body>
        <h1 class="usefont">
            測試1
        </h1>
        <h1>
            測試2
        </h1>
    </body>
</html>

134559_SbuN_1177792.png
圖1.1前端

上面的自已個h1中使用的,正是咱們存在服務端的字體。因爲各個瀏覽器的兼容性問題,css3

1.IE瀏覽器:EOT
2.Mozilla瀏覽器:OTF,TTF
3.Safari瀏覽器:OTF,TTF​​,SVG
4.歌劇:OTF,TTF​​,SVG
5.Chrome瀏覽器:TTF,SVGgit

因此,咱們須要準備多個格式的不一樣的字體文件。指代同一份字體。github

@font-face {
    font-family: 'icons';
    src: url(../font/curiconfont.eot#iefix) format('embedded-opentype'),
         url(../font/curiconfont.woff) format('woff'),
         url(../font/curiconfont.ttf) format('truetype'),
         url(../font/curiconfont.svg?#iconfont) format('svg');
    font-weight: normal;
    font-style: normal;
}

後面的format指代的是牆面的資源是那種格式的。如想更詳細瞭解,能夠百度一下font-face。上面提到的例子能夠在github上的hellofontface.html中找到。web

2 什麼是iconfont

既然font-face能夠指定字體文件,那麼字體長成什麼樣,不就是開發者說的算了麼。咱們能夠描述一個字體,它長成這樣:clipboard.png。其實,話說回來,文字不就是圖像麼。人類最先發明文字的時候就是按照圖像來發明的。因此,咱們能夠把一些字符,描述成圖像。在咱們的網頁上,當成圖像來使用。這就是iconfont了。把一些零散的icon作成字體。咱們調用文字的時候,渲染出來的就是icon圖像了。segmentfault

3 iconfont怎麼用

咱們來拿手機百度首頁的字體作個小例子試試(如圖3.1),咱們新加入一個font-face,起名爲myFont,在須要使用這份iconfont的部分,font-family設置爲myFont,則這部分區域可使用上該font文件:瀏覽器

<!DOCTYPE HTML>
<html>
    <head>
        <meta charset="utf-8" />
        <style>
            @font-face {
                font-family: myfont;
                src: url('http://m.baidu.com/static/index/iconfont/iconfont_c0634602.woff');
            }   
            .usefont {
                font-family: myfont;
            }   
        </style>
    </head>
    <body>
        <h1 class="usefont">
            &#xe609;
        </h1>
        <h1>
            &#xe609;
        </h1>
    </body>
</html>

140105_VXcp_1177792.png
圖3.1
咱們看到咱們在網頁上寫了一個字符,原本這個字符對應的文字應該是什麼都沒有:
clipboard.png可是,咱們的iconfont中賦予了這個字符的圖像:140030_aPBx_1177792.png,因而,咱們將這個字符所在的區域的字體,設置爲咱們的iconfont文件。因而瀏覽器就渲染出了這個字符在咱們的font文件中,對應的圖像。這裏要注意一下---- ,是一個字符的html編碼。這個字符在瀏覽器中沒有定義,可是在iconfont中有定義。咱們可使用unicode碼來惟一標識一個字符,將這個字符在咱們的文件中畫出來。這樣就能夠利用上iconfont了。服務器

4 iconfont怎麼作?

既然知道了怎麼用,就要開始瞭解一下,如何製做一個iconfont了。國內有阿里巴巴的iconfont平臺,能夠選本身喜歡的圖標導出iconfont。

http://www.iconfont.cn/

若是咱們手裏有一些圖標,想轉換爲iconfont的話,能夠直接使在線工具轉換:

http://image.online-convert.com/convert-to-svg

設計師們也可使用illustrator直接將圖片導出爲svg,具體導出方式能夠參考以下連接:

http://www.w3cplus.com/svg/svg-files-from-illustrator-to-the-web.html

導出單個icon的svg後,能夠上傳至阿里巴巴的iconfont平臺,與其餘圖標拼合成一張字體文件。(後續會更新一個咱們自產的iconfont生成框架)

5 iconfont的利與弊

看到這裏,一些同窗確定會問,那咱們爲何要用iconfont呢?直接用圖片不就行了。

這裏咱們分析一下使用iconfont的利與弊

5.1 iconfont的利

5.1.1 iconfont圖像放大後,不會失真。

相信讀者們沒有見過文字在網頁上放大的時候會失真的情況吧,由於字體是矢量的,字體的描繪只記錄繪製的路徑。而圖片不是,咱們若是把一張小圖放大若干倍以後,會發現圖像變得模糊了。由於圖像是基於像素點的描述,放大後,以前圖像的一個像素,被放大爲多個像素。天然是會失真的

5.1.2 iconfont節省流量

在圖片清晰度要求越高的狀況下,咱們的圖片自己就會越大。這樣很是耗費資源,並且,圖像須要的色彩值信息,也會存儲。這樣也極大的浪費了空間。iconfont顏色由css決定,尺寸要求變大的話,則適應性的變大。傳輸的大小不會變大。

5.1.3 iconfont在顏色變幻方面很簡單

試想,若是一個圖標一開始是黑色的hover上去的時候變爲藍色的話,若是這個icon是用圖片來實現的話,咱們須要在hover的時候,更換背景圖片,若是使用iconfont的話,則能夠直接替換icon的color就行。

5.2 iconfont的弊

5.2.1 iconfont不能支持一個圖像裏面混入多重顏色

做爲文字,是不會出現左邊是紅色右邊是綠色的情況的。一個文字,是一個總體,統一的顏色。這個顏色就取決於css的color了。因此使用iconfont作圖標的話,最好使用純色的圖標。

5.2.2 iconfont的使用沒有使用圖片那麼直接,簡單。

若是單論直接使用的話,圖片仍是比較便捷的。

至於本身的網站要不要使用iconfont就看各位了。

本章的例子在github上,須要的同窗請自行查看:

https://github.com/houyu01/iconfontsample

接下來的一篇文章,我將會和讀者們一塊兒聊聊前端模板拼裝與渲染的那些事兒,不要走開,請關注我.....
前端模板拼裝與渲染的那些事兒原創文章,版權全部,轉載請註明出處

相關文章
相關標籤/搜索