Skip to content

CSS Sprite:合併小圖以減少請求數

CSS Sprite:把小圖合併成一張以減少請求

CSS Sprite 是一種效能優化技巧,目的是將多個小圖像合併成一張大圖,再透過 CSS background-position 顯示特定區塊,減少 HTTP 請求數量、提升載入效能。

傳統方式:多個 HTTP 請求。

css
.icon-home { background: url('home.png'); }
.icon-user { background: url('user.png'); }
.icon-cart { background: url('cart.png'); }

Sprite 方式:單一 HTTP 請求。

css
.sprite {
  background: url('sprites.png') no-repeat;
  display: inline-block;
}

.icon-home { background-position: 0 0; }
.icon-user { background-position: -32px 0; }
.icon-cart { background-position: -64px 0; }

現在的替代方案

做法說明
內嵌 SVG可用 CSS 改色、縮放不失真,最推薦
SVG Sprite集中管理圖示,再以引用的方式取用
圖示字型舊專案常見,但無障礙與對齊都較麻煩
CSS Sprite相容舊環境時才考慮

圖片相關的取捨也可參考 影像 <img>響應式影像

常見問題

HTTP/2 之後還需要 Sprite 嗎?

需求大幅降低。HTTP/2 支援多路複用,同時下載很多小檔案的成本已經低很多。除非要相容舊環境,否則不必特地製作。

現在圖示該怎麼處理?

優先用 SVG。它可以直接內嵌在頁面中、支援以樣式改色與縮放不失真,維護起來比拼圖方便得多。

Sprite 有什麼缺點?

維護成本高,新增或調整一張小圖就要重新拼版並更新所有座標;圖片也無法個別替換或快取。

延伸閱讀