針對易讀性的背景濾鏡相容方案(CSS filter 相容方案)

塗鴉碼龍發表於2016-05-26

你知道現在有多火嗎?用這種很大的,高質量的,支援 Retina 屏的模糊的 JPEG 圖片作為 header 背景 :

See the Pen Web site header, circa 2016 by Taylor Hunt (@tigt) on CodePen.


潛在的問題是如果瀏覽器不支援濾鏡 filter,文字將不可讀 。這違背了可訪問性的原則,再完美的視覺也無濟於事。

附圖1
支援和不支援 filter 的效果對比

因此呢,你需要提前準備好處理模糊的圖片,可是設計師偏要你實現動態模糊呢,圖片不固定,跟 Apple 的效果一樣一樣的,咋辦?如果是使用者上傳的圖片又咋辦?嗯,你需要一臺圖片處理伺服器,聽起來成本很高。

我碰巧想到一個妙招,讓不支援 filter 的瀏覽器用顏色圖層代替,方案並不完美,但是具有高可讀性:

附圖2
不支援 filter 的效果

基本實現

我用偽元素作為背景,因為給元素加 filter單純給背景加 filter 相容性更好

加特效

此時,設計師發話了,讓背景圖模糊一下,再來個輕微變暗效果就更好了。

這麼做還遠遠不夠,不支援 filter 的瀏覽器將嚴重影響閱讀。

上妙招

是否聽過 filteropacity() 效果 ?對比廣泛支援的 opacity 屬性,它顯得有點雞肋,但是它的存在才使得相容方案得以實現:

如果支援 filter 濾鏡,帶圖片的偽元素是模糊的,微微變暗的,這一黑色的遮罩層是完全透明的。如果不支援濾鏡呢,顯示效果並不完美,但是不會阻礙任何人閱讀上面的文字。

CodePen 的例子在此,希望你喜歡:

See the Pen Filtered background with fallback for legibility by Taylor Hunt (@tigt) on CodePen.

其它 filter 濾鏡的使用或許也能受此啟發,我把它放到了我的錦囊裡。

何不用 @supports 代替?

瀏覽器對 CSS 特性檢測(@supports)的支援程度跟 filter 保持一致 ,替換以後程式碼更加清晰明瞭:

你完全可以這麼寫,全看個人喜好。我查閱了 CanIUse 的使用資料,有一些環境仍不支援 @supports

  • Chrome 18–27
  • Safari 8.x
  • UC Browser 9.9(撰寫本文時)

直到2016年5月,以上瀏覽器的聯合使用份額是 ≈ 美國 3.6%、世界範圍 10.5%(感謝大洋彼岸 UC 的盛行)。這些數字會隨著時間流逝逐漸減少,到那時,如果想寫更加清晰的 CSS 就推薦使用 @supports 了。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式

針對易讀性的背景濾鏡相容方案(CSS filter 相容方案) 針對易讀性的背景濾鏡相容方案(CSS filter 相容方案)

相關文章