目录

CSS 遮罩


通过 CSS 遮罩,您可以创建一个遮罩层来放置在元素上,以部分或完全隐藏元素的某些部分。


CSS mask-image 属性

CSSmask-image属性指定遮罩层图片。

遮罩层图片可以是PNG图片、SVG图片、CSS渐变,或一个SVG <mask> 元素


浏览器支持

笔记:大多数浏览器仅部分支持 CSS 屏蔽。在大多数浏览器中,除了标准属性之外,您还需要使用 -webkit- 前缀。

下表中的数字指定完全支持该属性的第一个浏览器版本。 -webkit- 后面的数字指定使用前缀的第一个版本。

Property
mask-image 4.0 -webkit- 79.0 -webkit- 53.0 4.0 -webkit- 15.0 -webkit-

使用图片作为遮罩层

要使用 PNG 或 SVG 图片作为遮罩层,请使用 url() 值传入遮罩层图片。

遮罩图片需要有透明或半透明区域。黑色表示完全透明。

这是我们将使用的蒙版图片(PNG 图片):

91xjr.com

这是意大利五渔村的图片:

Cinque Terre

现在,我们应用遮罩图片(上面的 PNG 图片)作为意大利五渔村图片的遮罩层:

Cinque Terre

示例

这是源代码:

.mask1 {
  -webkit-mask-image: url(w3logo.png);
  mask-image: url(w3logo.png);
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
}
亲自试一试 »

示例解释

这个mask-image属性指定用作元素的遮罩层的图片。

这个mask-repeat属性指定是否或如何重复蒙版图片。这no-repeat值表示遮罩图片不会重复(遮罩图片只会显示一次)。

另一个例子

如果我们省略mask-repeat属性,遮罩图片将在意大利五渔村的整个图片上重复:

Cinque Terre

示例

这是源代码:

.mask1 {
  -webkit-mask-image: url(w3logo.png);
  mask-image: url(w3logo.png);
}
亲自试一试 »


使用渐变作为遮罩层

CSS 线性和径向渐变也可以用作遮罩图片。

线性渐变示例

在这里,我们使用线性渐变作为图片的掩模层。该线性渐变从顶部(黑色)到底部(透明):

Cinque Terre
 

示例

使用线性渐变作为遮罩层:

.mask1 {
  -webkit-mask-image: linear-gradient(black, transparent);
  mask-image: linear-gradient(black, transparent);
}
亲自试一试 »

在这里,我们使用线性渐变和文本遮罩作为图片的遮罩层:

五渔村是意大利西北部利古里亚大区的一个沿海地区。它位于拉斯佩齐亚省西部,由五个村庄组成:蒙特罗索阿尔马雷、韦尔纳扎、科尔尼利亚、马纳罗拉和里奥马焦雷。

五渔村是意大利西北部利古里亚大区的一个沿海地区。它位于拉斯佩齐亚省西部,由五个村庄组成:蒙特罗索阿尔马雷、韦尔纳扎、科尔尼利亚、马纳罗拉和里奥马焦雷。

五渔村是意大利西北部利古里亚大区的一个沿海地区。它位于拉斯佩齐亚省西部,由五个村庄组成:蒙特罗索阿尔马雷、韦尔纳扎、科尔尼利亚、马纳罗拉和里奥马焦雷。

示例

使用线性渐变和文本遮罩作为遮罩层:

.mask1 {
  max-width: 600px;
  height: 350px;
  overflow-y: scroll;
  background: url(img_5terre.jpg) no-repeat;
  -webkit-mask-image: linear-gradient(black, transparent);
  mask-image: linear-gradient (black, transparent);
}
亲自试一试 »

径向渐变示例

在这里,我们使用径向渐变(形状为圆形)作为图片的掩模层:

Cinque Terre

示例

使用径向渐变作为遮罩层(圆形):

.mask2 {
  -webkit-mask-image: radial-gradient(circle, black 50%, rgba(0, 0, 0, 0.5) 50%);
  mask-image: radial-gradient(circle, black 50%, rgba(0, 0, 0, 0.5) 50%);
}
亲自试一试 »

在这里,我们使用径向渐变(形状为椭圆形)作为图片的掩模层:

Cinque Terre

示例

使用另一个径向渐变作为遮罩层(椭圆):

.mask3 {
  -webkit-mask-image: radial-gradient(ellipse, black 50%, rgba(0, 0, 0, 0.5) 50%);
  mask-image: radial-gradient(ellipse, black 50%, rgba(0, 0, 0, 0.5) 50%);
}
亲自试一试 »

使用SVG作为遮罩层

SVG<mask>元素可以在 SVG 图形内部使用来创建遮罩效果。

这里我们使用SVG<mask>元素为我们的图片创建不同的遮罩层:

抱歉,您的浏览器不支持内联 SVG。

示例

SVG 遮罩层(形成三角形):

<svg width="600" height="400">
  <mask id="svgmask1">
    <polygon fill="#ffffff" points="200 0, 400 400, 0 400"></polygon>
  </mask>
  <image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="img_5terre.jpg" mask="url(#svgmask1)"></image>
</svg>
亲自试一试 »
抱歉,您的浏览器不支持内联 SVG。

示例

SVG 遮罩层(形成为星形):

<svg width="600" height="400">
  <mask id="svgmask2">
    <polygon fill="#ffffff" points="100,10 40,198 190,78 10,78 160,198"></polygon>
  </mask>
  <image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="img_5terre.jpg" mask="url(#svgmask2)"></image>
</svg>
亲自试一试 »
抱歉,您的浏览器不支持内联 SVG。

示例

SVG 遮罩层(形成为圆圈):

<svg width="600" height="400">
  <mask id="svgmask3">
    <circle fill="#ffffff" cx="75" cy="75" r="75"></circle>
    <circle fill="#ffffff" cx="80" cy="260" r="75"></circle>
    <circle fill="#ffffff" cx="270" cy="160" r="75"></circle>
  </mask>
  <image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="img_5terre.jpg" mask="url(#svgmask3)"></image>
</svg>
亲自试一试 »

CSS 屏蔽属性

下表列出了所有 CSS 屏蔽属性:

Property Description
mask-image Specifies an image to be used as a mask layer for an element
mask-mode Specifies whether the mask layer image is treated as a luminance mask or as an alpha mask
mask-origin Specifies the origin position (the mask position area) of a mask layer image
mask-position Sets the starting position of a mask layer image (relative to the mask position area)
mask-repeat Specifies how the mask layer image is repeated
mask-size Specifies the size of a mask layer image