1. 程式人生 > >mask遮罩層詳解

mask遮罩層詳解

mask簡介

css的mask屬性允許使用者通過部分或者完全隱藏一個元素的可見區域。這種效果可以通過遮罩或者裁切特定區域的圖片。mask和background用法是相仿的,mask的值有這些:

  • mask-clip
  • mask-composite
  • mask-image
  • mask-mode
  • mask-origin
  • mask-position
  • mask-repeat
  • mask-size
  • mask-type

下面具體介紹每一個值的意義

1. mask-clip

含義
content-box 將繪製的內容剪下到內容框中。
padding-box 將繪製的內容剪下到padding框中。
border-box 將繪製的內容剪下到border框中。
margin-box 將繪製的內容剪下到margin框中。
fill-box 將繪製的內容剪下到物件邊界框中。
stroke-box 將繪製的內容剪下到stroke邊界框中。
view-box 使用最近的SVG視口作為參考框。
如果為建立SVG視口的元素指定了viewBox屬性,則參考框
位於由viewBox屬性建立的座標系的原點,並且參考框的尺寸
被設定為viewBox屬性的寬度和高度值。
no-clip 沒有被剪下。

mask-clip的預設值是border-box,而且支援多屬性值,例如:
mask-clip: content-box, border-box;
雖然支援的屬性值挺多,但是對於普通元素而言,生效的其實就前面4個,Firefox瀏覽器還支援no-clip。fill-box,stroke-box,view-box要與SVG元素關聯才有效果,目前還沒有任何瀏覽器對其進行支援。

2. mask-composite

含義
add 遮罩累加。
subtract 遮罩相減。也就是遮罩圖片重合的地方不顯示。
intersect 遮罩相交。也就是遮罩圖片重合的地方才顯示遮罩。
exclude 遮罩排除。也就是後面遮罩圖片重合的地方排除,當作透明處理。

以上屬性值,目前僅Firefox瀏覽器支援,Chrome預設mask-composite計算值是source-over,和標準預設值add有些差異,作用是一樣的,表示多個圖片遮罩效果是累加。

3. mask-image

mask-image指遮罩使用的圖片資源,預設值是none,也就是無遮罩圖片。所謂遮罩,就是原始圖片只顯示遮罩圖片非透明的部分。
mask-image也支援多屬性值,例如:
mask-image: url(...), url(...);

4. mask-mode

mask-mode屬性的預設值是match-source,意思是根據資源的型別自動採用合適的遮罩模式。
例如,如果我們的遮罩使用的是SVG中的<defs>中的<mask>元素,則此時的mask-mode屬性的計算值是luminance,表示基於亮度遮罩。如果是其他場景,則計算值是alpha,表示基於透明度遮罩。

含義
alpha 基於透明度遮罩
luminance 基於亮度遮罩
match-source 根據資源的型別自動採用合適的遮罩模式

mask-mode也支援多屬性值,例如:
mask-mode: alpha, match-source;
目前,mask-mode僅Firefox瀏覽器支援,因此,Chrome瀏覽器是看到的依然是基於alpha遮罩的效果,顏色不像上圖那樣淡。

5. mask-repeat

含義
repeat-x 水平x平鋪
repeat-y 垂直y平鋪
repeat 預設值,水平和垂直平鋪
no-repeat 不平鋪
space 表示遮罩圖片儘可能的平鋪同時不發生任何剪裁
round 表示遮罩圖片儘可能靠在一起沒有任何間隙,同時不發生任何剪裁。
這就意味著圖片可能會有比例的縮放。

mask-repeat也支援多屬性值,例如:
mask-repeat: space round, no-repeat;

6. mask-position

  • 支援單個關鍵字,如top,bottom,left,right,center(預設關鍵字的解析為center)
  • 支援各類數值(百分數或數值),例如:mask-position: 30% 50%;
  • mask-position也支援多屬性值,例如:mask-position: 0 0, center;
    Chrome和Firefox瀏覽器都支援mask-position屬性,Chrome還需要-webkit-私有字首,Firefox瀏覽器現在已經不需要了。

7. mask-origin

含義
content-box 位置相對於內容框。
padding-box 位置相對於padding框。
border-box 位置相對於border框。
margin-box 位置相對於margin框。
fill-box 位置相對於物件邊界框。
stroke-box 位置相對於stroke邊界框。
view-box 使用最近的SVG視口作為參考框。
如果為建立SVG視口的元素指定了viewBox屬性,則參考框
位於由viewBox屬性建立的座標系的原點,並且參考框的尺寸
被設定為viewBox屬性的寬度和高度值。

mask-origin的預設值是border-box,而且支援多屬性值,例如:
mask-origin: content-box, border-box;
雖然支援的屬性值挺多,但是對於普通元素而言,生效的其實就前面4個。fill-box,stroke-box,view-box要與SVG元素關聯才有效果,目前還沒有任何瀏覽器對其進行支援。

8. mask-size

mask-size作用是控制遮罩圖片尺寸,預設值是auto。

  • 支援contain和cover這兩個關鍵字
  • 支援各類數值(預設高度會自動計算為auto),例如:mask-size: auto 6px;
    同樣支援多屬性值,例如:mask-size: 50%, 25%, 25%;

9. mask-type

mask-type屬性功能上和mask-mode類似,都是設定不同的遮罩模式。但還是有個很大的區別,那就是mask-type只能作用在SVG元素上,本質上是由SVG屬性演變而來,因此,Chrome等瀏覽器都是支援的。但是mask-mode是一個針對所有元素的CSS3屬性,Chrome等瀏覽器並不支援,目前僅Firefox瀏覽器支援。
由於只能作用在SVG元素上,因此預設值表現為SVG元素預設遮罩模式,也就是預設值是luminance,亮度遮罩模式。如果需要支援透明度遮罩模式,可以這麼設定:mask-type: alpha;