Tim Chen 已發佈 2019-10-22

CSS Masks 圖片遮罩效果

前言

上回 CSS 文字鏤空與遮罩效果文章中,介紹了使用 background-clip 對文字進行鏤空或遮罩的效果,此次我們要來介紹另一個 CSS 樣式 mask ,透過 mask 屬性可以針對 PNG 或 SVG 設計遮罩的效果。

延伸閱讀

CSS文字鏤空與遮罩效果🔗


效果展示🔗

images


實作

-webkit-mask: url(“圖片位址") no-repeat center center;
mask: url(“圖片位址") no-repeat center center;
  1. 首先在 HTML 中新增一個 .mask 區塊。

HTML

<div class="mask"></div>
  1. 再來就要針對 .mask 設定你想要的 background ,這張圖片是到時候要被裁切的圖片,你可以當成背景圖片來看待,例如我要的是這張海底世界的圖片。

images

CSS

.mask {
  background: url("圖片位址") no-repeat top center;
  background-size: cover;
}
  1. 接下來就是重點了,一樣在 .mask 下輸入 mask: url(“圖片位址”) no-repeat center center; 就會發現背景圖片會被 mask 的圖片裁切,達成我們想要的圖片遮罩效果了,詳細程式碼如下。

CSS

.mask {
  background: url("圖片位址") no-repeat top center;
  background-size: cover;
  -webkit-mask: url("圖片位址") no-repeat center center;
  mask: url("圖片位址") no-repeat center center;
}

images

※因為 Chrome 與 Safari 目前僅支援部分的 mask 功能,並非正規支援的效果,所以如果需要在 Chrome 與 Safari 上使用必須得要加上前綴 -webkit-

images

範例

HTML

<div class="mask"></div>

CSS

.mask {
  margin: 5vh 0;
  width: 100vw;
  height: 90vh;
  background: url("圖片位址") no-repeat top center;
  background-size: cover;
  -webkit-mask: url("圖片位址") no-repeat center center;
  mask: url("圖片位址") no-repeat center center;
  -webkit-mask-size: contain;
  mask-size: contain;
}

Masks 簡單介紹

maskbackground 的屬性還蠻像的,所以大家應該還蠻容易上手的。

例如 :

  • mask-image
  • mask-position
  • mask-repeat
  • mask-size

mask-image

mask-image 就是設定遮罩圖片的屬性,最一般的就是使用 url() 來設定圖片,這也是 Chrome 與 Safari 少數有支援的 mask 相關屬性,然而 mask-image 並不單單只能使用 url() 來設定遮罩圖片,還能使用 image-set() 來針對不同像素密度密度顯示不同的畫面遮罩圖片。

mask-image: image-set()

效果展示🔗

簡單來說,就是依照你的顯示螢幕像素密度來顯示不同的遮罩圖片,例如電腦螢幕的像素密度通常為 100 多或是不到 100 而手機螢幕的像素密度隨隨便便就是 300 以上,就可以依此特性來設計在手機與電腦顯示不同遮罩圖片。

images

HTML

<div class="mask"></div>

CSS

.mask {
  margin: 5vh 0;
  width: 100vw;
  height: 90vh;
  background: url("圖片位址") no-repeat top center;
  background-size: cover;
  -webkit-mask: -webkit-image-set(url("圖片1位址") 1x, url("圖片2位址") 2x) no-repeat center center;
  mask: image-set(url("圖片1位址") 1x, url("圖片2位址) 2x) no-repeat center center;
  -webkit-mask-size: contain;
  mask-size: contain;
}

mask-image: image-set() 目前並非正規支援的效果,且只有 Chrome 與 Safari 支援,所以如果需要在 Chrome 與 Safari 上使用記得要加上 -webkit- 前綴。

images

※想知道像素密度可以在這邊計算 連結

mask-image: element()

mask 其實也能針對文字設定遮罩效果,只需使用 mask-image: element() 然而可惜的是目前此項屬性僅支援 Firefox 有興趣的客倌再自行研究,我這邊就不放範例了。

images

mask-position

background-position 基本上是一樣的,只是有一點要注意的是因為是實驗性功能所以在 Chrome 上使用必須要加 -webkit-

images

mask-repeat mask-size 使用上跟 background 是差異不大的,在 Chrome 上使用也一樣都要加上 -webkit-


後記

總算打完了,這次的文章又更長了,本來不打算打這麼長的,這樣在閱覽上會很辛苦,但又覺得把 Masks 的介紹獨立一篇會太多餘,所以只好摻在一起做撒尿牛丸啦~

如果有人覺得太長可以分兩篇的也歡迎回饋給我,我會在思考如何安排文章長度的,謝謝各位看到這邊,也請各位看倌多多指教與交流。

參考資料

客棧說書

Rest belongs to the work as the eyelids to the eyes.

images

關於筆者

暱稱:Tim Chen

介紹:Medium:https://medium.com/@timchen0607

文章列表 文章列表