请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2022-9-13 13:23 编辑
svg路径可以任意设计,通过 path 属性,svg能画出任何图形。CSS对svg的此功能自然不会放过,于是,有一个名叫 offset-path 的CSS属性,一看就知道其意,偏移路径,但不一定知道它用来干啥。嗯,CSS3以前,它不是这个名儿,而是叫 motion-path,这个才一看既知其意,又晓其作用,运动路径。好吧,offset-path的前身是motion-path,是用来做路径运动的。
offset,偏移,大量用于svg,比如针对这个 offset-path,配套的属性还有 offset-distance、offset-rotate 等,这两个在CSS实现svg路径动画中特重要,所以先提出来。顾名思义,offset-distance 是偏移距离之意,offset-rotate 是 偏移过程中如何旋转(auto是默认值,所以没有特殊需要不必设置 offset-rotate 属性)。
既是调用svg路径,我们就先来路径,然后在考虑如何在CSS中调用这个路径。这里使用A指令画一个椭圆路径:
<svg width="300" height="200"> <path d="M 10 100 A 140 80 0 1 1 290 100 A 140 80 0 0 1 10 100 z" fill="none" stroke="olive"></path> </svg>
上面代码,我们在 300*200 的svg画布上通过 path 路径指令,绘制了一个自身闭合的椭圆(有没有z都是闭合的)。A 是圆弧指令,本帖不解释它的语法。代码中,我们用两个 A 指令画出向上和向下的圆弧,两个圆弧合起来就是椭圆——我们要的是椭圆的路径,它就是 d 的值。效果如下:
OK,接下来讨论如何在CSS中调用这个路径做某个对象的运动轨迹。我们先来设计一个CSS盒子,类选择器:
.mybox {
--ss: 0s; position: absolute; width: 20px; height: 20px;
background: olive; display: block;
offset-path: path("M10 100 A140 80 0 1 1 290 100 A140 80 0 0 1 10 100z"); animation: move 6s var(--ss) linear infinite;
}
.box1 { --ss: .25s; background: pink; }
.box2 { --ss: .5s; background: green; }
@keyframes move {
to { offset-distance: 100%; }
}
这个 .mybox,有一个变量 --ss: 0s; ,用于延时执行动画,首个盒子不延时(0s),.box1 是第二个盒子,延时 0.25s,第三个盒子 .box2延时 0.5s,每个盒子各有自己的背景色。路径的引用在红色代码那里,注意语法、语句。调用动画语句是绿色的代码。关键帧动画是蓝色代码部分,使用了 offset-distance,偏移到 100%。下面是HTML代码:
<span class="mybox"></span> <span class="mybox box1"></span>
<span class="mybox box2"></span>
效果请看:
|