CSS没有边界的裁剪路径 - Clip Paths

随着浏览器对shape-outside和clip-path等属性的支持增长,CSS Shapes愈来愈受到关注。有几种方法可使用CSS Shapes,特别是clip-path属性,乍一看咱们并不知道这个属性如何使用,下面就来详细的介绍它。浏览器

裁剪路径clip path的基础知识

在深刻研究以前,咱们应该先看看基本的形状和clip-path。裁剪路径能够将CSS Shapes如circle()、ellipse(), inset()或自由变化的polygon()应用于任何元素。元素中不在形状边界内的任何内容都将被裁剪删除掉。ide

使用多边形函数,咱们能够建立三角形、星形或其余形状,虽然在可使用px等固定单位,但百分比将提供更大的灵活性并自适应于元素的尺寸。
图片描述wordpress

因此对于一个八边形,咱们能够设置八组x,y点坐标来定义。在这种状况下,对于第一个x,咱们从盒子宽度的30%开始,对于y,咱们从盒子的顶部开始,而后顺时针设置各个点。可见区域就是经过将这些点用直线链接而造成的形状。函数

clip-path: polygon(
  30% 0%,
  70% 0%,
  100% 30%,
  100% 70%,
  70% 100%,
  30% 100%,
  0% 70%,
  0% 30%
);

看不见的顶点

上面实现一个八边形,咱们设置了八个点的坐标。可是,咱们能够跳出元素框的限制去思考,也就是说要跳出0% - 100%的这个范围。布局

元素的盒边框是裁剪后内容的显示边界,但咱们仍然能够为元素定义超出盒边框的点。动画

clipboard.png

经过定义超过0%-100%范围的点,咱们能够把一个有三个点的多边形变成四边形、五边形或六边形。在这个例子中,都是定义clip-path: polygon()函数的三个点,可是因为超出了元素框的边界,咱们能够看到一个三角形和两个五边形。spa

因而,上面的八边形只用四个点就能够实现。code

clipboard.png

一条裁剪路径,多个形状

咱们能够利用超出元素边界的这种能力用一个polygon()建立多个裁剪形状。blog

clipboard.png
CSS源码图片

根据元素的位置,咱们能够直接制做出每一个形状,可是由于咱们知道裁剪坐标点能够在元素框以外的空间中移动,因此能够绘制额外的线来帮助咱们找到下一个点的位置。

它还能够帮助咱们分割元素。结合CSS自定义属性,咱们能够处理重叠的元素,并将每一个元素裁剪成交替的条带。下面的例子是两个重叠的圆角矩形,每一个被分红不规则的矩形动画。

clipboard.png
CSS源码

不一样的填充规则不一样的形状

polygon()函数不只仅是一组坐标点的集合,它还有另外的一个参数 — 填充规则 ,咱们一直使用的默认值是nonzero,它还有另一个值是evenodd,这两个值它们肯定形状的内部和外部的规则是不一样的。

clipboard.png
CSS源码

当使用evenodd规则时,咱们能够经过从任意的点绘制光线来肯定点是在边界内仍是在边界外。若是光线穿过裁剪路径线的和为偶数,则该点被视为外部,若是光线穿过裁剪路径线的和为奇数,则该点位于内部。

顺序

要注意的是,有许多CSS属性例如CSS Filters, Blend Modes等都会影响元素的外观。而这些效果会按下面的顺序应用到元素上:

  1. CSS Filters (例如 filter: blur(2px))
  2. Clipping (本文所讲的)
  3. Masking (相似与裁剪)
  4. Blend Modes (例如 mix-blend-mode: multiply)
  5. Opacity

若是咱们须要一个模糊的星星形状,模糊效果会发生在裁剪以前。因为模糊效果会参照元素的边框,可是咱们将元素边框裁剪掉了,因而前一个星星的模糊效果会丢失。

clipboard.png
CSS源码

若是咱们想模糊星星,能够选择将剪裁后的元素包裹在模糊的父元素中。内部元素将首先呈现其星星的形状,而后父元素将正常模糊其内容。

经过动画来显示内容

CSS Shapes是能够添加动画效果的,它容许咱们在不影响元素内容的状况下改变元素的可视区域。例如,咱们能够从内容隐藏(彻底裁剪)开始,并增大裁剪路径以显示其中的内容。要注意的是,clip-path: polygon()动画形的一个重要条件是每一个关键帧的坐标点数以及填充规则都必须相同。不然,浏览器将没有足够的信息来插入中间值。

图片描述
CSS源码

总结

Clip paths给咱们提供了一些新的有趣的可能,同时clip-path属性并不会改变元素自己的尺寸和布局,这也是它强大的地方,咱们能够大量的使用这个属性来改变元素的外观。

获取以上效果的所有源码能够:
图片描述

相关文章
相关标签/搜索