最近在搭建自己微前端应用的过程中,发现了一个自己之前不曾了解但是却非常有用的css属性: clip-path,在经过一番摸索后,决定将所知所学整理成文,方便日后回顾
接下来我们就一起进入 clip-path 属性的探秘之旅吧~
clip-path的前辈:clip
在我们了解clip-path之前,我们先将目光转移到它的前辈: clip 身上
clip属性是用于裁剪元素的,它可以在对应元素内指定一个矩形区域进行裁剪,最终拿到对应元素的矩形子域,它的用法示例如下:
1 | /* 不支持百分比的写法,如 clip:rect(50%, 60%, 30%, 50%)是不合法的 */ |
可以看到它的用法十分简单:以对应元素的左上角为坐标原点,分别设置top, right, bottom, left,同时将该元素的定位设置为absolute或fixed,虽然用法简单,但是它有如下两个缺点:
- 只对绝对定位(absolute,fixed)的元素有效,而对于relative和static的元素无效
- 因为只有rect()函数可用,所以只能用来裁剪出矩形
我们再来看看它的兼容性如何
可以看到clip的兼容性还是很喜人的,但是由于它存在上述两个缺点,所以导致它的适用场景并不是很多,而本文的主角 clip-path 就是为了解决这两个使用痛点而诞生的,那么接下来我们就好好认识下这个神奇的属性吧~
生来便是主角
clip-path可以应用于任何元素,由于没有clip的第一条限制,因此大大拓宽了适用场景,它支持设置三个属性,列举如下:
- clip-source:可以使用形如 clip-path:url(resources.svg#c1) 的方式从svg导入裁剪元素的路径
- basic-shape:绘制图形的函数,种类很多,列举如下:
- circle,用于裁剪出圆形
- ellipse,用于裁剪出椭圆形
- inset,用于裁剪出矩形
- polygon,用于裁剪出任意图形,最为强大的一个api
- geometry-box:可以看成裁剪区域的坐标系,
里的api的坐标都将以 指定的盒子进行定位,如果不指定,默认是border-box,它的取值列举如下: - margin-box
- border-box
- padding-box
- content-box
- fill-box
- stroke-box
- view-box
通过
下面列出
1 | /* 需要注意的是,所有api里面的百分比都是以元素宽度作为基准来计算的 */ |
最后贴一下clip-path的兼容性截图
我们可以看到该属性的兼容性十分不乐观,IE全系不支持,chrome也要到54才能完全支持,因此造成了该属性虽然强大,但是比较冷门的局面,因为历史包袱的原因让这么牛逼的css属性不能被广泛普及,真是可惜呀~
结语
css虽然相对于其他语言更简单一些,但是还是有很多地方可以去挖掘,类似于clip-path这样冷门但非常强大的属性应该还有很多,唯有不断去钻研才能开拓自己的眼界,所以加油吧,骚年!🤪