这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
问题起源
就在昨天,我们通过文章纯CSS绘制五角星简单介绍了CSS中的一个截取属性值:clip-path可以按照指定的方式截取指定形状的图形,并且介绍了clip-path的两种取值:
-
按照盒模型取值:
margin-box,border-box等 -
取函数,如
polygon多边形函数,我们了解到可以通过如下方式绘制,或者说截取一个多边形:clip-path: polygon(x1 y1, x2 y2, x3 y3, ....)
那么,clip-path还有哪些精妙的取值来绘制图形呢?
今天我们来认识一下其他函数。
inset
改函数定义为截取一个矩形,4个参数分别表示距离外层盒模型的上、右、下、左边界的偏移量。类似margin、padding,也可以通过1,2,4个值来设定4个偏移量。(刚知道这种简略写法被称为:边际速记语法)。
如下所示,第二行类似border-radius,设置截图图形的4角的弧度。
clip-path: inset(22% 12% 15px 30px);
clip-path: inset(22% 12% 15px 30px round 6px);
如图所示:
完整图形:
截图代码:
clip-path: inset(10% 20% 20% 20% round 280px 10px 10px 280px);
截图效果:
circle
见字知意,截取一个圆形图案,函数参数解释如下所示:
clip-path: circle(6rem at 0rem 0rem);
这段代码表示在盒模型中,以坐标(0rem, 0rem)的位置为圆心,已6rem长度为半径R,截图圆形图案。当然,这个位置截图的效果会是一个扇形。
仍然采用上图为原图,以下代码的截图效果:
clip-path: circle(200px at 40% 40%);
ellipse
同样见字知意,绘制椭圆,其含义为:
ellipse(x半径 y半径 as x y)
x, y表示圆心位置。对比circle并不难理解。
代码:clip-path: ellipse(200px 100px at 40% 40%);
截图效果如下:
遗留了一个未解决的问题
一个图形能否使用两个clip-path截图函数呢?
比如我对完整图形先使用circle截图,如何再对截图后的图案再次进行截图,CSS允许这样做吗?