bg-pic

最近在搭建自己微前端应用的过程中,发现了一个自己之前不曾了解但是却非常有用的css属性: clip-path,在经过一番摸索后,决定将所知所学整理成文,方便日后回顾

接下来我们就一起进入 clip-path 属性的探秘之旅吧~

bqb

clip-path的前辈:clip

在我们了解clip-path之前,我们先将目光转移到它的前辈: clip 身上

clip属性是用于裁剪元素的,它可以在对应元素内指定一个矩形区域进行裁剪,最终拿到对应元素的矩形子域,它的用法示例如下:

1
2
3
4
5
6
/* 不支持百分比的写法,如 clip:rect(50%, 60%, 30%, 50%)是不合法的 */
div{
position:absolute;
clip:rect(0px,60px,200px,0px);
clip:rect(50px 250px 250px 50px); /* 兼容IE6, IE7,需要将值之间的逗号去掉 */
}

可以看到它的用法十分简单:以对应元素的左上角为坐标原点,分别设置top, right, bottom, left,同时将该元素的定位设置为absolute或fixed,虽然用法简单,但是它有如下两个缺点:

我们再来看看它的兼容性如何

bg-pic

可以看到clip的兼容性还是很喜人的,但是由于它存在上述两个缺点,所以导致它的适用场景并不是很多,而本文的主角 clip-path 就是为了解决这两个使用痛点而诞生的,那么接下来我们就好好认识下这个神奇的属性吧~

bqb

生来便是主角

clip-path可以应用于任何元素,由于没有clip的第一条限制,因此大大拓宽了适用场景,它支持设置三个属性,列举如下:

通过属性可以知道clip-path非常强大,借助它我们可以实现任何天马行空的创意~

bqb

下面列出中各个api的具体用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* 需要注意的是,所有api里面的百分比都是以元素宽度作为基准来计算的 */


/*
circle(radius at x-axis y-axis)
为了创建圆形,需要给circle传入三个值:圆心的坐标(X值和Y值)以及半径。当定义圆的半径时,我们可以用at关键字来定义圆心坐标。
*/
div {
clip-path: circle(50% at 50% 50%);
}

/*
ellipse(x-radius y-radius at x-axis y-axis)
为了实现椭圆,需要给ellipse提供4个值:椭圆的x轴半径、y轴半径、定位椭圆位置的x坐标和y坐标,后面两个值用at关键字和前面两个值分开。
*/
div {
clip-path: ellipse(100px 200px at 50% 50%);
}

/*
inset(<top> <right> <bottom> <left> round <top-radius> <right-radius> <bottom-radius> <left-radius>)
使用四个值(对应“上 右 下 左”的顺序)来裁剪矩形和设置圆角半径。
*/
div {
clip-path: inset(25% 0 25% 0 round 0 25% 0 25%);
clip-path: inset(25% 0 round 0 25%); /* 简写形式 */
}

/*
polygon(x1-axis y1-axis, x2-axis y2-axis, … )
指定各个节点的坐标,不限制数量,最终将所有点连接起来形成裁剪框,从而裁剪出我们需要的形状
它是最强大的api,通过它我们可以裁剪出包括但不限于上述所有api的图形
*/
div {
clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);
}

最后贴一下clip-path的兼容性截图

bg-pic

我们可以看到该属性的兼容性十分不乐观,IE全系不支持,chrome也要到54才能完全支持,因此造成了该属性虽然强大,但是比较冷门的局面,因为历史包袱的原因让这么牛逼的css属性不能被广泛普及,真是可惜呀~

bqb

结语

css虽然相对于其他语言更简单一些,但是还是有很多地方可以去挖掘,类似于clip-path这样冷门但非常强大的属性应该还有很多,唯有不断去钻研才能开拓自己的眼界,所以加油吧,骚年!🤪