星期二, 12月 15, 2009

讓網站的小圖示共用一張圖片

為什麼要讓網站的小圖示共用一張圖片呢?其實在流量小的網站是沒差別的,但是在高流量的網站,一個美觀且功能眾多的網頁,光一個瀏覽頁,就會大量的對 Web Server提出HTTP Request。所以將小圖合併成一個大圖檔,則可以降低Web Server的請求處理。流量大的網站常常使用這種技巧,如 Facebook 就大量使用到這樣的方式。

下面範例是使用一張大圖,透過CSS定義,取得小圖的圖形。



我將一組小圖示組成一個大圖:圖示來源

然後利用這張大圖來作一個範例:


大圖
空白圖




<style>
.
santa {
    
background-image:url(map.gif);
    
background-position:0px 0pxwidth:48pxheight:48px;
}
.
reindeer {
    
background-image:url(map.gif);
    
background-position:-49px 0pxwidth:48pxheight:48px;
}
.
xmastree {
    
background-image:url(map.gif);
    
background-position:-97px 0pxwidth:48pxheight:48px;

}
.
snowman {
    
background-image:url(map.gif);
    
background-position:-145px 0pxwidth:48pxheight:48px;
}
</
style>

<
img src="blank.gif" class=xmastree>聖誕樹<Br>
<
img src="blank.gif" class=reindeer>麋鹿<br>
<
img src="blank.gif" class=santa>聖誕老公公<br>
<
img src="blank.gif" class=snowman>雪人


在 Style 裡面的定義 santa (聖誕老公公)這個為例,使用 background-image: url 指定了一張大背景圖,接著使用 background-position 指定起始點為 x y 兩點的位置,並指定 width 和 height 來表示長寬。

當要應用這張指定的區塊圖時,只要在 img 這個標籤內使用 class="santa" 指定 className 即可。但是因為 img 若沒指定 src 會出現 x 圖,所以全部的圖都設 src 為 blank.gif (自己製造的一個 1px 大小的小空白圖),這樣就可以囉。

那後面就在這個部落格顯示這個範例外觀:
聖誕樹
麋鹿
聖誕老公公
雪人
註:因為這個部落格的CSS定義緣故,所以這邊看到的圖示稍微變調囉。

2 則留言:

  1. 這種方式被稱為CSS Sprites,這裡有個中文工具可以用:
    http://timc.idv.tw/canvas-css-sprites/zh-tw/

    ;)

    回覆刪除
  2. 如果我的站台流量像FB那麼大 ;) 這個技巧就用得上了..會有那一天嗎 ^^

    回覆刪除

我的意見