IE6 只能正確顯示 GIF 的布林透明(全透明/全不透明),對 PNG 的 256 階 Alpha 通道一律渲染為灰藍色背景。這讓網頁設計師在 2000 年代末至 2010 年代初極度頭痛:漂亮的半透明陰影、圓角、疊層效果,要么降級成 GIF 鋸齒邊緣,要么轉存 JPEG 失去透明層,要么寫大量 CSS Hack。
| 特性 | 說明 |
|---|---|
| 極小體積 | 1 KB,不影響頁面載入速度 | 修正 IE 濾鏡副作用 | 自動處理 AlphaImageLoader 導致的連結無法點擊、表單無法聚焦等問題 |
| 雙模支援 | <img src="..."> 與 CSS background-image 同時生效 |
| 早期執行 | 頁面載入初期自動掃描修正,無閃爍 |
| 自動尺寸 | 允許 PNG 原始寬高自動套用,無需手動指定 |
| 部署簡單 | 單行條件註解引入即可 |
<!--[if IE 6]>
<script src="js/unitpngfix.js"></script>
<![endif]-->
unitpngfix.js 放入專案 js/ 目錄。<head> 區塊加入上方條件註解。若需客製化,可在引入前定義全域變數:
<script>
var UnitPNGFix = {
// 指定透明 GIF 佔位圖路徑(預設為 1x1 透明 GIF)
clearImage: 'images/blank.gif',
// 是否處理 background-image(預設 true)
processBackgrounds: true,
// 針對特定 CSS 選擇器限制處理範圍(預設所有)
selector: '.png-fix'
};
</script>
<!--[if IE 6]><script src="js/unitpngfix.js"></script><![endif]-->
UnitPNGFix 利用 IE 專屬 AlphaImageLoader 濾鏡:
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='...', sizingMethod='scale');
腳本掃描 DOM 中所有 <img> 與含 background-image 的元素,偵測副檔名為 .png,動態注入濾鏡並隱藏原始 src/背景圖,同時修正濾鏡已知的 z-index 疊層、滑鼠事件穿透等 Bug。
雖然 IE6 市佔率已近乎零,但維護舊系統時仍可能遇到。建議採用:
UnitPNGFix 以 1 KB 體積、零配置複雜度、完整支援 img 與 background-image,成為 IE6 時代 PNG 透明問題的「標準答案」。雖然時代已變,但這段代碼展現的「特性偵測、條件載入、優雅降級」工程思維,至今仍值得前端工程師學習借鑑。