1. 程式人生 > 其它 >CSS精靈技術與字型圖示詳解

CSS精靈技術與字型圖示詳解

CSS精靈技術(sprite)

精靈技術產生的背景

當用戶訪問一個網站時,需要向伺服器傳送請求,網頁上的每張影象都要經過一次請求才能展現給使用者。

然而,一個網頁中往往會應用很多小的背景影象作為修飾,當網頁中的影象過多時,伺服器就會頻繁地接受和傳送請求,這將大大降低頁面的載入速度。為了有效地減少伺服器接受和傳送請求的次數,提高頁面的載入速度,出現了CSS精靈技術(也稱CSS Sprites、CSS雪碧)。

精靈技術本質

簡單地說,CSS精靈是一種處理網頁背景影象的方式。它將一個頁面涉及到的所有零星背景影象都集中到一張大圖中去,然後將大圖應用於網頁,這樣,當用戶訪問該頁面時,只需向服務傳送一次請求,網頁中的背景影象即可全部展示出來。通常情況下,這個由很多小的背景影象合成的大圖被稱為精靈圖.

精靈技術的使用

CSS 精靈其實是將網頁中的一些背景影象整合到一張大圖中(精靈圖),然而,各個網頁元素通常只需要精靈圖中不同位置的某個小圖,要想精確定位到精靈圖中的某個小圖,就需要使用CSS的background-image、background-repeat和background-position屬性進行背景定位,其中最關鍵的是使用background-position屬性精確地定位。

製作精靈圖

CSS 精靈其實是將網頁中的一些背景影象整合到一張大圖中(精靈圖),那我們要做的,就是把小圖拼合成一張大圖。

大部分情況下,精靈圖都是網頁美工做。

我們精靈圖上放的都是小的裝飾性質的背景圖片。 插入圖片不能往上放。
我們精靈圖的寬度取決於最寬的那個背景。 
我們可以橫向擺放也可以縱向擺放,但是每個圖片之間,間隔至少隔開偶數畫素合適。
在我們精靈圖的最低端,留一片空隙,方便我們以後新增其他精靈圖。

背景圖片很少的情況,沒有必要使用精靈技術,維護成本太高。 如果是背景圖片比較多,可以建議使用精靈技術。

字型圖示

圖片是有諸多優點的,但是缺點很明顯,比如圖片不但增加了總檔案的大小,還增加了很多額外的"http請求",這都會大大降低網頁的效能的。更重要的是圖片不能很好的進行“縮放”,因為圖片放大和縮小會失真。 我們後面會學習移動端響應式,很多情況下希望我們的圖示是可以縮放的。此時,一個非常重要的技術出現了,額不是出現了,是以前就有,是被從新"寵幸"啦。。 這就是字型圖示(iconfont).

字型圖示優點

可以做出跟圖片一樣可以做的事情,改變透明度、旋轉度,等..
但是本質其實是文字,可以很隨意的改變顏色、產生陰影、透明效果等等...
本身體積更小,但攜帶的資訊並沒有削減。
幾乎支援所有的瀏覽器
移動端裝置必備良藥...

設計字型圖示

假如圖示是我們公司單獨設計,這個屬於UI設計人員的工作, 他們在 illustrator 或 Sketch 這類向量圖形軟體裡建立 icon圖示,之後儲存為svg格式,然後給我們前端人員就好了。
如果圖示是大眾的,網上本來就有的,可以直接跳過第一步,進入第三步。

上傳生成字型包

當UI設計人員給我們svg檔案的時候,我們需要轉換成我們頁面能使用的字型檔案, 而且需要生成的是相容性的適合各個瀏覽器的。
​ 推薦網站: http://icomoon.io

下載後把font裡的四個檔案複製到自己的目錄裡

icomoon字型檔

IcoMoon成立於2011年,推出的第一個自定義圖示字型生成器,它允許使用者選擇他們所需要的圖示,使它們成一字型。 內容種類繁多,非常全面,唯一的遺憾是國外伺服器,開啟網速較慢。

推薦網站: http://www.iconfont.cn/

阿里icon font字型檔

http://www.iconfont.cn/

這個是阿里媽媽M2UX的一個icon font字型圖示字型檔,包含了淘寶圖示庫和阿里媽媽圖示庫。可以使用AI製作圖示上傳生成。 一個字,免費,免費!!

fontello

線上定製你自己的icon font字型圖示字型檔,也可以直接從GitHub下載整個圖示集,該專案也是開源的。

Font-Awesome

這是我最喜歡的字型檔之一了,更新比較快。目前已經有369個圖示了。

Glyphicon Halflings

這個字型圖示可以在Bootstrap下免費使用。自帶了200多個圖示。

Icons8

提供PNG免費下載,畫素大能到500PX

字型引入到HTML

<style>
    @font-face {  /* 電腦中沒有的字型,我們需要宣告 */
  font-family: 'icomoon';
  src:  url('fonts/icomoon.eot?7kkyc2');
  src:  url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
    url('fonts/icomoon.ttf?7kkyc2') format('truetype'),
    url('fonts/icomoon.woff?7kkyc2') format('woff'),
    url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
  font-weight: normal;
  font-style: normal;
}
      
   span {
       font-family: "icomoon";  /* 一定保證和上面的 font-family: 相同 */
       font-style: normal;  /* 讓傾斜的不傾斜 */
       font-size: 100px;
       color: pink;
   }

   div::before {
       font-family: "icomoon";  /* 一定保證和上面的 font-family: 相同 */
       font-size: 100px;
       color: hotpink;
       content: "\e91b";
}

</style>
<span></span>
<div></div>

如果想要增加新的圖示,需要Import icons,然後選擇上次資料夾裡面的selection.json。然後新增新圖示,下載後在自己的專案裡把fonts替換成剛剛下載的,從demo網站裡選擇需要的即可。


作者:符號哥
微信公眾號:左側為二維碼
個人技術網站-程式設計符號網:http://www.itfh.cn
個人技術網站-IT原始碼網:http://www.itym.cn
新浪微博:https://weibo.com/u/2814576687
如果你想及時得到個人撰寫文章以及著作的訊息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。