CSS Sprites(圖片精靈/雪碧圖)是將多張小圖標/圖片合併為一張大圖,通過 CSS
background-position定位顯示所需部分。核心目的:減少 HTTP 請求數,提升頁面加載性能。

.sprite {
display: inline-block;
background-image: url('../images/sprite.png'); /* 合併大圖 */
background-repeat: no-repeat;
/* background-size: 200px 200px; 響應式/高清屏需設置 */
}
.icon-rank-1 { width: 20px; height: 20px; background-position: 0 0; }
.icon-rank-2 { width: 20px; height: 20px; background-position: -20px 0; }
.icon-rank-3 { width: 20px; height: 20px; background-position: -40px 0; }
.icon-arrow-up { width: 12px; height: 12px; background-position: -60px -10px; }
.icon-loading { width: 32px; height: 32px; background-position: 0 -50px; }
<ul class="rank-list">
<li class="top">
<em class="icon-rank-1"></em>
<p><a href="#">【慕客訪談】“有為屌絲”在路上</a></p>
</li>
<li class="top">
<em class="icon-rank-2"></em>
<p><a href="#">【有獎活動】給父親的三行書信</a></p>
</li>
<li>
<em class="icon-rank-3"></em>
<p><a href="#">《程序猿,請曬出你的童年》獲獎公告</a></p>
</li>
</ul>
| 維度 | 優勢 | 劣勢/挑戰 |
|---|---|---|
| 網絡性能 | 請求數從 N 降為 1,顯著降低延遲、節省頻寬 | 首屏需加載大圖,可能延遲關鍵圖標顯示 |
| 維護成本 | 單文件管理 | 增刪改圖標需重新合併、重新測量座標、修改 CSS |
| 響應式/高清屏 | - | 需多套圖(@1x/@2x/@3x)或 SVG,background-size 計算複雜 |
| 緩存策略 | 整張圖緩存 | 任一圖標修改導致整張圖緩存失效 |
| 可訪問性 | - | 背景圖無語義,螢幕閱讀器不可識,需輔助 ARIA/文本 |
webpack-spritesmith、postcss-spritesgulp.spritesmith、grunt-spritesmithicon-home-normal.png、icon-home-hover.png)src/assets/sprites/ 目錄sprite.png + _sprite.scss@include sprite($icon-home-normal)<!-- sprite.svg --> <svg style="display:none"> <symbol id="icon-home" viewBox="0 0 1024 1024"><path d="..."/></symbol> <symbol id="icon-search" viewBox="0 0 1024 1024"><path d="..."/></symbol> </svg> <!-- 使用 --> <svg class="icon"><use xlink:href="#icon-home"></use></svg> <svg class="icon"><use xlink:href="#icon-search"></use></svg>
優勢:矢量無損縮放、單請求(內聯或外部引用)、CSS 控制顏色/大小、語義化、可訪問性好、支持多色、構建工具自動生成(svg-sprite-loader、vite-plugin-svg-sprite)。
將圖標轉為字體文件(woff2/woff/ttf),通過 font-family + content: "\e900" 使用。劣勢:單色、抗鋸齒渲染差、字體加載閃爍 (FOIT/FOUT)、語義化差、維護字體文件麻煩。逐漸被 SVG 取代。
.icon-home {
width: 24px; height: 24px;
mask: url("data:image/svg+xml,") no-repeat center;
background-color: currentColor; /* 繼承文字顏色 */
}
適合極少量圖標、無構建工具項目。
icon-{模塊}-{名稱}-{狀態},如 icon-header-search-hoverbackground-image + background-size<span class="icon-search" aria-hidden="true"></span><span class="sr-only">搜索</span>sprite.a1b2c3.png,長期強緩存CSS Sprites 是 HTTP/1.1 時代的經典性能優化模式,核心邏輯是「以維護成本換取請求數減少」。在 HTTP/2 多路復用、SVG 矢量圖標普及、構建工具鏈成熟的今天,SVG Symbol 方案在幾乎所有維度上全面超越 Sprite。理解 Sprite 原理有助於維護老項目、理解性能優化演進史,但新項目應毫不猶豫擁抱現代圖標方案。