裁剪和遮罩中的形状 - 以及如何使用它们

Firefox 54 的发布指日可待,它将在现有的酷炫 CSS 属性中引入新功能:clip-path

clip-path 是一种允许我们裁剪(即剪切)元素部分的属性。到目前为止,在 Firefox 中,您只能使用 SVG 来裁剪元素

但是,使用 Firefox 54,您也可以使用形状:内嵌、圆形、椭圆形和多边形!

注意:本文包含许多演示,这些演示需要 支持clip-pathmask要能够查看和交互本文中的每个演示,您需要 Firefox 54 或更高版本

基本用法

重要的是要考虑到 clip-path 不接受“图像”作为输入,而是作为 <clipPath> 元素

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen clip-path(静态 SVG 遮罩)

一件很酷的事情是,这些 <clipPath> 元素可以包含 SVG 动画

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen clip-path(动画 SVG)

但是,随着即将发布的 Firefox 版本,我们也将可以使用 CSS 形状函数。这些允许我们在样式表中定义形状,因此无需 SVG。我们可用的形状函数是:circleellipseinsetpolygon。您可以在此处查看它们的实际效果

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen oWJBwW

不仅如此,我们还可以使用 CSS 对它们进行动画处理。唯一的限制是我们不能“混合”函数形状(例如,从 circle 形状变形到 inset 形状),以及在对多边形进行动画处理时,多边形在整个动画过程中必须保留相同数量的顶点。

这是一个使用 circle 形状的简单动画

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen 动画 clip-path

还有一个使用 polygon 的动画。注意:即使我们受限于保留顶点的数量,我们也可以通过重复值来“合并”它们。这会造成动画到任意数量边的多边形的错觉。

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen 动画 clip-path(多边形)

请注意,clip-path 还开辟了布局方面的新可能性。以下演示使用裁剪使多栏文章中的图像更有趣

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen 布局示例

使用 JavaScript 增强趣味性

裁剪开辟了很酷的可能性。在以下示例中,clip-path 已用于隔离网站元素 - 在本例中,模拟游览/教程

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen 使用 clip-path 的游览

它是使用 JavaScript 实现的,通过动态获取元素的尺寸,并计算相对于参考容器的距离,然后使用该距离来更新 clip-path 属性中使用的内嵌形状。

现在我们还可以根据用户输入动态更改裁剪,例如,在以下示例中,使用鼠标控制“潜望镜”效果

查看 CodePen 上 ladybenko (@ladybenko) 的 Pen clip-path(潜望镜)

clip-path 还是 mask?

有一个类似的 CSS 属性,mask,但它与 clip-path并不相同。根据您的具体用例,您应该选择其中一个。另外请注意,各浏览器之间的支持情况不同,目前 Firefox 是唯一完全支持所有遮罩功能的浏览器,因此您需要运行 Firefox 54 才能与 CodePen 上的以下演示进行交互。

遮罩可以使用图像或 SVG 中的 <mask> 元素。另一方面,clip-path 使用 SVG 路径或 CSS 形状。

遮罩会修改它遮罩的元素的外观。例如,这里有一个圆形遮罩,它填充了线性渐变

Linear gradient mask

请记住,您也可以使用位图图像,即使它们没有 alpha 通道(即透明度),也可以通过调整 mask-mode 来实现

mask-mode example

遮罩的关键概念是它会修改图像的像素,改变它们的值 - 甚至会使其中一些像素完全透明。

另一方面,裁剪会“剪切”元素,这包括它的碰撞面。查看 以下演示,它显示了两张相同的图片,使用相同的十字形状进行遮罩和裁剪。尝试将鼠标悬停在图片上,看看会发生什么。您会注意到,在遮罩的图像中,碰撞区域也包含遮罩的部分。在裁剪的图像中,碰撞区域仅是元素的可见部分(即十字形状)。

Mask vs clip comparison

那么遮罩优于裁剪,还是反之?不,它们只是用于不同的用途。


我希望这篇文章能让你对 clip-path 感到好奇。查看即将发布的 Firefox 版本试用它吧!

关于 Belén Albeza

Belén 是一位工程师和游戏开发者,在 Mozilla 开发者关系部门工作。她关心 Web 标准、高质量代码、可访问性和游戏开发。

Belén Albeza 的更多文章…


一条评论

  1. Ken Saunders

    新玩具!
    很棒的演示,尤其是潜望镜效果。
    谢谢

    2017 年 6 月 11 日,下午 5:19

本文的评论已关闭。