紀錄工作經驗、相關知識,解決技術相關問題。

CSS

CSS Filter 濾鏡效果教學:blur 模糊、grayscale 灰階與 10 種屬性圖解

CSS Filter 濾鏡效果教學:blur 模糊、grayscale 灰階與 10 種屬性圖解 特色圖片

在前端 HTML 網頁製作上,CSS Filter 濾鏡效果(filter 屬性)是非常實用的視覺處理工具,共有 10 種內建函式可以單獨或組合使用,不需要請設計師重新出圖就能即時改變圖片色調、模糊度與陰影。

快速複製與 10 種濾鏡章節跳轉:


如何使用 CSS Filter 濾鏡效果?(單一與多重疊加語法)

使用 CSS Filter 的標準屬性名稱為單數的 filter(極早期瀏覽器曾使用 -webkit-filter)。假設我們要讓圖片產生模糊、霧化效果,語法如下:

.css-filters-img {
  filter: blur(5px);
}

同時套用多種濾鏡效果(以空白分隔)

filter 屬性支援同時疊加多個濾鏡函式,只要在函式與函式之間用空白隔開即可(注意:中間不要加逗號)。例如同時套用「模糊 + 灰階黑白」:

.css-filters-img {
  filter: blur(5px) grayscale(1);
}

10 種 CSS Filter 濾鏡效果完整視覺圖解

以下使用同一張原始圖片,直接透過瀏覽器即時渲染對比「原始圖片」與「套用 filter 後的真實畫面效果」:

1. blur 模糊(霧化圖片)

讓圖片或元素產生高斯模糊效果,參數單位可使用 px、rem(不接受百分比),數值越大越模糊。常被用於未解鎖內容預覽或背景柔化。

.css-filters-img {
  filter: blur(5px);
}
原始圖片(無濾鏡)
CSS Filter 原始圖片
套用 filter: blur(5px)
CSS Filter blur(5px) 模糊效果

2. brightness 亮度(壓暗背景襯托白字 / :hover 增亮)

調整圖片或元素的明暗程度。1(或 100%)為原始亮度;小於 1(如 0.4)會將圖片壓暗(非常適合在 Banner 底圖壓暗後放上白色標題文字),大於 1(如 1.3)則會增亮。

/* 壓暗至 40% 亮度 */
.css-filters-img-dark {
  filter: brightness(0.4);
}

/* 滑鼠移上時增亮至 130% */
.css-filters-img:hover {
  filter: brightness(1.3);
}
原始圖片(brightness(1))
CSS Filter brightness 原始圖片
壓暗:brightness(0.4)
CSS Filter brightness(0.4) 壓暗效果
增亮:brightness(1.35)
CSS Filter brightness(1.35) 增亮效果

3. contrast 對比度

調整畫面明暗對比度。1(或 100%)為原始值;小於 100% 畫面會趨於灰平,大於 100% 則亮處更亮、暗處更暗。

.css-filters-img {
  filter: contrast(200%);
}
原始圖片(100%)
CSS Filter contrast 原始圖片
套用 filter: contrast(200%)
CSS Filter contrast(200%) 高對比效果

4. drop-shadow 貼合輪廓陰影(支援去背透明 PNG / SVG)

它與一般 box-shadow 最大的差別在於:drop-shadow 會穿透透明背景,自動偵測圖片內「非透明像素的真實輪廓」來產生陰影,而不會像 box-shadow 那樣在去背圖片外圍畫出一個難看的矩形黑框。(完整比較與氣泡尖角實作可參考 CSS drop-shadow 與 box-shadow 差別:去背透明圖片(PNG / SVG)陰影語法。)

.css-filters-img {
  /* 語法:drop-shadow(水平位移 垂直位移 模糊半徑 陰影顏色) */
  filter: drop-shadow(6px 10px 12px rgba(0, 0, 0, 0.55));
}
原始圖片(無陰影)
CSS Filter drop-shadow 原始圖片
套用 drop-shadow(6px 10px 12px rgba(0,0,0,0.55))
CSS Filter drop-shadow 陰影效果

5. grayscale 灰階(圖片變黑白效果)

將圖片或整個網頁轉換為黑白色調。數值介於 0 ~ 1(或 0% ~ 100%),1 為完全黑白。常被用於「已售完/停用狀態的商品卡片」或將彩色合作品牌 Logo 牆統一轉為灰階,滑鼠移上(:hover)再恢復彩色。

/* 預設轉為全黑白,滑鼠移上恢復原色 */
.partner-logo {
  filter: grayscale(1);
  transition: filter 0.3s ease;
}

.partner-logo:hover {
  filter: grayscale(0);
}
原始彩色圖片(grayscale(0))
CSS Filter grayscale 原始圖片
套用 filter: grayscale(1) 黑白灰階
CSS Filter grayscale(1) 黑白效果

6. hue-rotate 色相旋轉

將元素的所有顏色依據色相環(Color Wheel)進行角度旋轉(0deg ~ 360deg),可用於動態變換圖示或漸層背景的色系。

.css-filters-img {
  filter: hue-rotate(90deg);
}
原始圖片(0deg)
CSS Filter hue-rotate 原始圖片
套用 filter: hue-rotate(90deg)
CSS Filter hue-rotate(90deg) 色相旋轉效果

7. invert 負片反相(Dark Mode 純黑 Icon 反白技巧)

將顏色反轉,數值介於 0 ~ 1(或 0% ~ 100%)。在實務開發深色模式(Dark Mode)時,若圖示是以 img 標籤載入的純黑 PNG/SVG,只要加上 filter: invert(1);,就能瞬間將純黑圖示反轉為純白圖示,不必另外準備白色圖檔!

/* 深色模式下將純黑圖示反白 */
.dark-theme .icon-black {
  filter: invert(1);
}
原始圖片(invert(0))
CSS Filter invert 原始圖片
套用 filter: invert(1) 負片反相
CSS Filter invert(1) 負片效果

8. opacity 不透明度

調整元素的不透明度,1(100%)為完全不透明,0(0%)為完全透明。作用與獨立的 CSS opacity 屬性相似,但放在 filter 中可與其他濾鏡函式串聯並交由硬體合成層處理。

.css-filters-img {
  filter: opacity(0.4);
}
原始圖片(opacity(1))
CSS Filter opacity 原始圖片
套用 filter: opacity(0.4) 半透明
CSS Filter opacity(0.4) 半透明效果

9. saturate 飽和度(色彩鮮豔度)

調整色彩鮮豔程度。1(100%)為原始飽和度;設為 0 等同於灰階,大於 1(例如 2 或 250%)則會讓色彩變得更加濃郁鮮豔。

.css-filters-img {
  filter: saturate(2.5);
}
原始圖片(saturate(1))
CSS Filter saturate 原始圖片
套用 filter: saturate(2.5) 高飽和度
CSS Filter saturate(2.5) 鮮豔效果

10. sepia 懷舊復古泛黃

替圖片覆蓋一層溫暖的棕褐色泛黃濾鏡,模擬復古舊照片風格。數值介於 0 ~ 1(或 0% ~ 100%)。

.css-filters-img {
  filter: sepia(0.8);
}
原始圖片(sepia(0))
CSS Filter sepia 原始圖片
套用 filter: sepia(0.8) 復古懷舊
CSS Filter sepia(0.8) 懷舊泛黃效果

常見問題:filter: blur() 與毛玻璃 backdrop-filter: blur() 差在哪?

許多新手想做導覽列「半透明毛玻璃背景」,卻誤用了 filter: blur(8px),結果導致導覽列裡面的文字與按鈕也全部一起糊掉無法閱讀:

  • filter: blur(8px):會把「元素本身與裡面的所有子元素(含文字)」全部變模糊。
  • backdrop-filter: blur(8px):元素本身的文字保持清晰,只把「壓在元素背後的底圖與網頁內容」變模糊。

若要實作毛玻璃效果或排解 backdrop-filter 失效問題,請參考專文:CSS backdrop-filter 毛玻璃效果教學:blur 背景模糊語法與無效原因排查。


瀏覽器相容性與效能注意事項

瀏覽器環境Chrome / EdgeFirefoxSafari (macOS / iOS)
filter 標準屬性Chrome 53+ / Edge 12+Firefox 35+Safari 9.1+ / iOS 9.3+
  1. 避免對大面積容器同時套用高半徑 blur:blur(20px) 與 drop-shadow 需要即時計算周圍像素,若在滾動頁面上大量使用,容易造成行動裝置掉幀。
  2. 搭配 transition 實現平滑切換:當用於卡片 :hover 灰階轉彩色或增亮時,加上 transition: filter 0.3s ease; 即可獲得流暢的漸變動畫。

參考資料

發佈留言