CSS Sprites的概念、原理、適用范圍和優缺點


  • CSS Sprites概念

    CSSSprites在國內很多人叫css精靈,是一種網頁圖片應用處理方式。它允許你將一個頁面涉及到的所有零星圖片都包含到一張大圖中去,這樣一來,當訪問該頁面時,載入的圖片就不會像以前那樣一幅一幅地慢慢顯示出來了。對於當前網絡流行的速度而言,不高於200KB的單張圖片的所需載入時間基本是差不多的,所以無需顧忌這個問題。

    加速的關鍵,不是降低質量,而是減少個數。傳統切圖講究精細,圖片規格越小越好,重量越小越好,其實規格大小無所謂,計算機統一都按byte計算。客戶端每顯示一張圖片都會向服務器發送請求。所以,圖片越多請求次數越多,造成延遲的可能性也就越大。

     

    CSS Sprites技術不新鮮,早在2005年 CSS Zengarden 的園主 Dave Shea 就在 ALA 發表對該技術的 詳細闡述 。原先只在CSS玩家之間作為一種網頁制作方法流傳,后來出來個 14 Rules for Faster-Loading Web Sites , 技術人員之間競相傳閱,其中第一條規則Make Fewer HTTP Requests就提到CSS Sprites。於是這個小妖精就火了起來,甚至出現了在線生成工具,勢不可擋也。近來國內很多blog都提到CSS Sprites,最著名的例子莫過於http://www.google.co.kr/ 下方的那幾個動畫。最新發布的YUI中,也是使用到CSS Sprites,幾乎都有的CSS裝飾圖都被一個 40×2000的圖 包辦。社交大站Facebook最近也使用了一個 22×1150的圖片 承擔了所有icon.一時間,CSS Sprites無處不在。

     

  • 原理

    我們知道,自CSS革命以降,HTML傾向於語義化,在一般情況下不再在標記里寫裝飾性的內容而是把呈現的任務交給了CSS。GUI是繽紛多彩的,少不了各種漂亮的圖來裝點。新時代的生產方式是,在HTML布滿各種各樣的鈎子(hook),然后交由CSS來處理。在需要用到圖片的時候,現階段是通過CSS屬性background-image組合background-repeat, background-position等來實現(題外話:為何我提現階段,因為未來瀏覽器若支持content則又新增另外的實現方法)。我們的主角是,你一定猜到了,就是background-position。通過調整background-position的數值,背景圖片就能以不同的面貌出現在你眼前。其實圖片整體面貌沒有變,由於圖片位置的改變,你看到只該看到的而已。就好比手表上的日期,你今天看到是21,明天看到是22,是因為它的position往上跳了一格。所以你也大概了解到,CSS Sprites一般只能使用到固定大小的盒子(box)里,這樣才能夠遮擋住不應該看到的部分。

  • css sprites 適用范圍:

    1,需要通過降低http請求數完成網頁加速。

    2,網頁中含有大量小圖標。或者,某些圖標通用性很強。

    3,網頁中有需要預載的圖片。主要是a與a:hover背景圖這種關系的。如果a與a:hover的背景圖分別加載,那么,就會出現用戶鼠標移到某個按鈕上,按鈕的背景突然消失再出來,產生“閃爍”,如果按鈕文字色與大背景相同或相近,就更囧了,有可能讓人產生按鈕“消失”了的錯覺。

     

  • 需要滿足的條件

    在網頁設計中,通過這項技術拼合在一起的圖片最好有一項規律。定寬或者定高。最好是寬高都能定下來。需要平鋪的圖片,顯然不適合sprite。

    如上圖的buttons,就屬於定寬定高的情況。

    定寬情況下,則可平行排列若干小圖片。定高,則縱向排列小圖片。

    若背景既不定寬,也不定高情況下強行使用css sprites技術,則容易產生“不應該出現的圖片出現在頁面上”的狀態。若是“強行定高”,也將非常不利於日后的維護。

  • 優點

    我們從前面了解到,CSS Sprites為什么突然跑火,跟能夠提升網站性能有關。顯而易見,這是它的巨大優點之一。普通制作方式下的大量圖片,現在合並成一個圖片,大大減少了HTTP的連接數。HTTP連接數對網站的加載性能有重要影響。

  • 缺點

    至於可維護性,這是一般雙刃劍。可能有人喜歡,有人不喜歡,因為每次的圖片改動都得往這個圖片刪除或添加內容,顯得稍微繁瑣。而且算圖片的位置(尤其是這種上千px的圖)也是一件頗為不爽的事情。當然,在性能的口號下,這些都是可以克服的。

    由於圖片的位置需要固定為某個絕對數值,這就失去了諸如center之類的靈活性。

    前面我們也提到了,必須限制盒子的大小才能使用CSS Sprites,否則可能會出現出現干擾圖片的情況。這就是說,在一些需要非單向的平鋪背景和需要網頁縮放的情況下,CSS Sprites並不合適。YUI的解決方式是,加大圖片之間的距離,這樣可以保持有限度的縮放。


  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM