CSS Sprites詳解
CSS Sprites技術(shù)不新鮮,早在2005年 CSS Zengarden 的園主 Dave Shea 就在 ALA 發(fā)表對(duì)該技術(shù)的 詳細(xì)闡述 。原先只在CSS玩家之間作為一種制作方法流傳,后來(lái)出來(lái)個(gè) 14 Rules for Faster-Loading Web Sites , 技術(shù)人員之間競(jìng)相傳閱,其中第一條規(guī)則Make Fewer HTTP Requests就提到CSS Sprites。于是這個(gè)小妖精就火了起來(lái),甚至出現(xiàn)了在線生成工具,勢(shì)不可擋也。近來(lái)國(guó)內(nèi)很多blog都提到CSS Sprites,最著名的例子莫過(guò)于 http://www.google.co.kr/ 下方的那幾個(gè)動(dòng)畫。最新發(fā)布的YUI中,也是使用到CSS Sprites,幾乎都有的CSS裝飾圖都被一個(gè) 40×2000的圖 包辦。社交大站Facebook最近也使用了一個(gè) 22×1150的圖片 承擔(dān)了所有icon.一時(shí)間,CSS Sprites無(wú)處不在。
原理
我們知道,HTML傾向于語(yǔ)義化,在一般情況下不再在標(biāo)記里寫裝飾性的內(nèi)容而是把呈現(xiàn)的任務(wù)交給了CSS。GUI是繽紛多彩的,少不了各種漂亮的圖來(lái)裝點(diǎn)。新時(shí)代的生產(chǎn)方式是,在HTML布滿各種各樣的鉤子(hook),然后交由CSS來(lái)處理。在需要用到圖片的時(shí)候,現(xiàn)階段是通過(guò)CSS屬性background-image組合background-repeat, background-position等來(lái)實(shí)現(xiàn)(題外話:為何我提現(xiàn)階段,因?yàn)槲磥?lái)瀏覽器若支持content則又新增另外的實(shí)現(xiàn)方法)。我們的主角是,你一定猜到了,就是background-position。通過(guò)調(diào)整background-position的數(shù)值,背景圖片就能以不同的面貌出現(xiàn)在你眼前。其實(shí)圖片整體面貌沒有變,由于圖片位置的改變,你看到只該看到的而已。就好比手表上的日期,你今天看到是21,明天看到是22,是因?yàn)樗膒osition往上跳了一格。所以你也大概了解到,CSS Sprites一般只能使用到固定大小的盒子(box)里,這樣才能夠遮擋住不應(yīng)該看到的部分。
我們使用YUI的sprite.png舉個(gè)例子,假如我們有這么一段代碼,max代表最大化,min代表最小化,我們需要給它們配上相應(yīng)的漂亮圖片(這樣我們的網(wǎng)站才能夠吸引人,才可以賣錢,才可以到佛羅里達(dá)曬太陽(yáng):D):
<div class="max">最大化</div>
<div class="min">最小化</div>
這兩個(gè)class都使用同一個(gè)圖片:
.min, max {
width:16px;
height:16px;
background-image:url(http://developer.yahoo.com/yui/build/assets/skins/sam/sprite.png);
background-repeat: no-repeat; //我們并不想讓它平鋪
text-indent:-999em; //隱藏文本的一種方法
}
效果如下:
最大化最小化
最大化最小化
我們看到一團(tuán)灰,沒錯(cuò),因?yàn)槲覀冞€沒有指定background-position,默認(rèn)為 0 0,可以看下 sprite.png , 處于這個(gè)位置正是灰塊。好了,我們要找到代表最大化的加號(hào)和代表最小化的減號(hào)的位置找出來(lái)。經(jīng)過(guò)測(cè)量,最大化按鈕位于Y軸的350px處,最小化按鈕位于Y軸400px處。想一想我們?nèi)绾尾拍茏屗鼈兡軌蝻@示出來(lái)呢,明顯,要向上提升sprite.png,得到代碼如下:
.max {
background-position: 0 -350px;
}
.min {
background-position: 0 -400px;
}
耶,我們成功了:
最大化最小化
注意:為了舉例的方便,本例子直接在HTML內(nèi)置樣式,切勿在實(shí)踐中的非特殊情況使用這種方式)。
優(yōu)點(diǎn)
我們從前面了解到,CSS Sprites為什么突然跑火,跟能夠提升網(wǎng)站性能有關(guān)。顯而易見,這是它的巨大優(yōu)點(diǎn)之一。普通制作方式下的大量圖片,現(xiàn)在合并成一個(gè)圖片,大大減少了HTTP的連接數(shù)。HTTP連接數(shù)對(duì)網(wǎng)站的加載性能有重要影響。
缺點(diǎn)
至于可維護(hù)性,這是一般雙刃劍。可能有人喜歡,有人不喜歡,因?yàn)槊看蔚膱D片改動(dòng)都得往這個(gè)圖片刪除或添加內(nèi)容,顯得稍微繁瑣。而且算圖片的位置(尤其是這種上千px的圖)也是一件頗為不爽的事情。當(dāng)然,在性能的口號(hào)下,這些都是可以克服的。
由于圖片的位置需要固定為某個(gè)絕對(duì)數(shù)值,這就失去了諸如center之類的靈活性。
前面我們也提到了,必須限制盒子的大小才能使用CSS Sprites,否則可能會(huì)出現(xiàn)出現(xiàn)干擾圖片的情況。這就是說(shuō),在一些需要非單向的平鋪背景和需要網(wǎng)頁(yè)縮放的情況下,CSS Sprites并不合適。YUI的解決方式是,加大圖片之間的距離,這樣可以保持有限度的縮放。
總結(jié)
性能壓倒一切。CSS Sprites是值得推廣的一種技術(shù)。尤其適宜用于FIR,比如固定大小的icon替換。為保持兼容性,圖片中的各個(gè)部分保持一定的距離是一種不錯(cuò)的做法。
相關(guān)文章

CSS3打造的現(xiàn)代交互式登錄界面詳細(xì)實(shí)現(xiàn)過(guò)程
本文介紹CSS3和jQuery在登錄界面設(shè)計(jì)中的應(yīng)用,涵蓋動(dòng)畫、選擇器、自定義字體及盒模型技術(shù),提升界面美觀與交互性,同時(shí)優(yōu)化性能和可訪問性,感興趣的朋友跟隨小編一起看看吧2025-06-20CSS普通流、浮動(dòng)與定位網(wǎng)頁(yè)布局三大機(jī)制及最佳實(shí)踐
本文給大家講解CSS 的三種核心布局機(jī)制——普通流(Normal Flow)、浮動(dòng)(Float)和定位(Positioning)對(duì)于創(chuàng)建靈活、響應(yīng)式的網(wǎng)頁(yè)至關(guān)重要,本文將深入探討這三種機(jī)制的工作原2025-06-19
css實(shí)現(xiàn)角標(biāo)效果并帶有文章或圖標(biāo)效果(完整代碼)
文章介紹如何用CSS實(shí)現(xiàn)角標(biāo)效果,通過(guò).active類結(jié)合::after和::before偽元素,利用定位、邊框和旋轉(zhuǎn)創(chuàng)建紅色邊框與白色三角形的提示標(biāo)志,適用于按鈕或卡片元素的視覺增強(qiáng)設(shè)計(jì)2025-06-19CSS Anchor Positioning重新定義錨點(diǎn)定位的時(shí)代來(lái)臨(最新推薦)
CSS Anchor Positioning是一項(xiàng)仍在草案中的新特性,由 Chrome 125 開始提供原生支持需啟用實(shí)驗(yàn) flag,它允許你在 CSS 中通過(guò)錨點(diǎn)(anchor)來(lái)相對(duì)于任意 DOM 元素定位,本文2025-06-17CSS中的Static、Relative、Absolute、Fixed、Sticky的應(yīng)用與詳細(xì)對(duì)比
CSS 中的 position 屬性用于控制元素的定位方式,不同的定位方式會(huì)影響元素在頁(yè)面中的布局和層疊關(guān)系,以下是 static、relative、absolute、fixed、sticky 的詳細(xì)對(duì)比和應(yīng)用2025-06-17CSS place-items: center解析與用法詳解
place-items: center; 是一個(gè)強(qiáng)大的 CSS 簡(jiǎn)寫屬性,用于同時(shí)控制 網(wǎng)格(Grid) 和 彈性盒(Flexbox) 布局中的對(duì)齊方式,本文給大家介紹CSS place-items: center; 詳解與用法2025-06-17
CSS實(shí)現(xiàn)元素?fù)螡M剩余空間的五種方法
在日常開發(fā)中,我們經(jīng)常需要讓某個(gè)元素占據(jù)容器的剩余空間,本文將介紹5種不同的方法來(lái)實(shí)現(xiàn)這個(gè)需求,并分析各種方法的優(yōu)缺點(diǎn),感興趣的朋友一起看看吧2025-06-17CSS中前端單位 px、vw、vh 等的區(qū)別與使用建議
CSS單位區(qū)別與使用場(chǎng)景總結(jié):px絕對(duì)、vw/vh響應(yīng)式,%繼承父尺寸,em/rem文字縮放,vmin/vmax適應(yīng)寬高變化,固定布局用px或%,響應(yīng)式布局用vw/vh/rem,文字用em或rem,本文給大家2025-06-16- 這篇文章主要介紹了CSS3中的字體及相關(guān)屬性,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-06-12
CSS 樣式表的四種應(yīng)用方式及css注釋的應(yīng)用小結(jié)
這篇文章主要介紹了CSS 樣式表的四種應(yīng)用方式及css注釋的應(yīng)用小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-05-21




