使用屏蔽图像属性在 CSS 中屏蔽图像

我们介绍了如何使用clip-path属性通过css进行剪裁,因此我们现在自然要介绍掩码。与剪裁相反,在剪裁中,图像或元素的一部分要么完全不可见,要么完全可见,使用蒙版可以隐藏或显示具有不同不透明度级别的图像部分。

使用MASK-IMAGE属性可以在CSS中进行遮罩,并且必须提供一个图像作为遮罩。图像蒙版中100%为黑色的内容将完全可见,100%透明的内容将被完全隐藏,而介于两者之间的任何内容都将部分遮盖图像。Css中的Linearradial渐变是生成的图像,因此它们可以用作图像蒙版。使用遮罩元素的SVG也可以用作图像遮罩。让我们通过具体的例子来介绍图像蒙版的三种可能性:

使用渐变进行遮罩

让我们首先使用一个简单的线性渐变,从透明到黑色。第一个图像是我们的默认开始图像,第二个图像应用了线性渐变作为遮罩图像值:

Without mask
With gradient mask

下面是这里使用的CSS规则:

1.mask1 {
2  -webkit-mask-image: linear-gradient(to bottom, transparent 25%, black 75%);
3  mask-image: linear-gradient(to bottom, transparent 25%, black 75%);
4}

下面是另外两个可以通过使用渐变遮罩实现的有趣效果的示例:

Gradient mask example 2
Gradient mask example 3

以及这两个渐变蒙版的CSS规则:

1.mask2 {
2  -webkit-mask-image: radial-gradient(circle at 50% 60%, black 50%, rgba(0, 0, 0, 0.6) 50%);
3  mask-image: radial-gradient(circle at 50% 60%, black 50%, rgba(0, 0, 0, 0.6) 50%);
4}
5.mask3 {
6  -webkit-mask-image: radial-gradient(ellipse 90% 80% at 48% 78%, black 40%, transparent 50%);
7  mask-image: radial-gradient(ellipse 90% 80% at 48% 78%, black 40%, transparent 50%);
8}

使用镜像进行屏蔽

这里我们使用了一个使用Sketch创建的图像作为我们的图像蒙版。第一个图像是图像蒙版本身,第二个图像应用了该蒙版:

Image mask
With image mask

我们的css如下所示:

1.mask4 {
2  -webkit-mask-image: url("/path/to/image-mask.png");
3  mask-image: url("/path/to/image-mask.png");
4  -webkit-mask-size: 400px 600px;
5  mask-size: 400px 600px;
6}

我们在这里指定了遮罩大小的值,因为我们的图像遮罩是800px x** 1200px** ,但在这里我们希望所有东西都缩小一半,以便图像在视网膜上看起来很清晰。

使用SVG屏蔽

最后,如果您喜欢使用SVG,则可以使用SVG掩码元素定义图像掩码。

第一个例子目前似乎只能在Firefox中运行(你可能在不支持的浏览器中看不到任何东西 )。它定义了SVG掩码,然后我们像往常一样在CSS中引用该掩码的ID。第二个示例似乎得到了更广泛的支持,并将图像定义为SVG元素本身的一部分。

<$>[注意]还请注意,对于SVG蒙版,要使用的颜色是白色和黑色,而不是透明和黑色。颜色也是相反的,白色/部分白色是可见的。<$>

[鳄鱼mdPBExv 540]

示例1(三角形)

下面是第一个示例的SVG标记:

1<svg width="0" height="0" viewBox="0 0 400 600">
2  <defs>
3    <mask id="my-svg-mask">
4      <rect fill="#000000" x="0" y="0" width="400" height="600"></rect>
5      <polygon fill="#FFFFFF" points="200.5 152 349 449 52 449"></polygon>
6    </mask>
7  </defs>
8</svg>

然后,我们可以像往常一样,通过引用SVG掩码的ID,将该掩码应用于带有掩码的图像:

1.mask5 {
2  -webkit-mask-image: url(#my-svg-mask);
3  mask-image: url(#my-svg-mask);
4}

示例2(气泡)

对于我们的第二个SVG示例,所有内容都包含在SVG定义中,包括我们的主图像本身:

 1<svg width="400px" height="600px" viewBox="0 0 400 600">
 2  <defs>
 3    <mask id="my-svg-mask2">
 4      <rect id="Rectangle" fill="#000000" x="0" y="0" width="400" height="600"></rect>
 5      <circle id="Oval" fill="#FFFFFF" cx="67.5" cy="51.5" r="67.5"></circle>
 6      <circle id="Oval" fill="#FFFFFF" cx="296.597656" cy="118.597656" r="56.5976562"></circle>
 7      <circle id="Oval" fill="#FFFFFF" cx="53.4648437" cy="256.464844" r="81.4648437"></circle>
 8      <circle id="Oval" fill="#FFFFFF" cx="239.587891" cy="313.587891" r="70.5878906"></circle>
 9      <circle id="Oval" fill="#FFFFFF" cx="366.597656" cy="562.597656" r="56.5976562"></circle>
10      <circle id="Oval" fill="#FFFFFF" cx="93.203125" cy="486.203125" r="76.203125"></circle>
11    </mask>
12  </defs>
13  <image mask="url(#my-svg-mask2)" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/images/css/masking/masking-example1.jpg" width="400" height="600"></image>
14</svg>
Published At
Categories with 技术
Tagged with
comments powered by Disqus