CSS 动画一站式指南目录CSS 动画一站式指南1. CSS 动画1.1 变换 1.1.1 变换属性介绍 1.1.2 变换动画实践1.2 过渡 1.2.1 过渡属性介绍 1.2.2 过渡动画实践1.3
顺晟科技
2021-06-21 11:16:12
421
《CSS揭秘》里面发现一个很独特的一个动画,使用纯CSS3动画让一个元素沿着环形路径运动。听起来有点不可思议,本文将带你一起走进作者的文章中,由复杂到简单,由多个结构到简单结构解剖CSS3语句实现环形运动。
<div class="box box2"> <div class="ball">Ball</div> </div>
@keyframes spin{ to{transform: rotate(1turn);} } .box2 .ball{ animation:spin 3s infinite linear; transform-origin: 50% 150px; }效果如下图: 演示:demo1 其它辅助的CSS代码可以查阅一下演示代码源码。这里就不再写出了。
<div class="box box3"> <div class="ball"> <div class="inner">Ball</div> </div> </div>
@keyframes spin{ to{transform: rotate(1turn);} } @keyframes spin-reverse{ from{ transform:rotate(1turn); } } .box3 .ball{ animation:spin 3s infinite linear; transform-origin: 50% 150px; } .box3 .inner{ animation: spin-reverse 3s infinite linear; }看上面的代码,作者觉得还有优化的空间,让内层动画继承父元素的所有动画属性,然后把动画名覆盖掉,这样子要是有调整动画的属性只需要改个就行。
.box3 .inner{ animation:inherit;/*继承上级的属性*/ animation-name:spin-reverse; }从上面可以看到两个动画只是方向相反,那么我们想起了前面提到的animate-direction,使用reverse来得到动画的反向版本。
.box4 .ball{ animation:spin 3s infinite linear; transform-origin:50% 150px; } .box4 .inner{ animation:inherit; animation-direction: reverse; }效果图: 演示:demo2
@keyframes spin2{ from{ transform: translate(50%, 150px) rotate(0turn) translate(-50%, -150px) translate(50%,50%) rotate(1turn) translate(-50%,-50%) } to{ transform: translate(50%, 150px) rotate(1turn) translate(-50%, -150px) translate(50%,50%) rotate(0turn) translate(-50%,-50%) } } .box5 .ball{ animation: spin2 3s infinite linear; }演示:demo3 其实,最关键的一点还是在于坐标的转换,如下所示:
transform: rotate(30deg);
transform-origin: x y; // x, y为元素左上角相对圆心坐标的距离
// 等价于
transform: translate(x, y)
rotate(30deg)
translate(-x, -y);
transform-origin:0 0;
09
2022-11
09
2022-11
15
2022-09
15
2022-09
15
2022-09
14
2022-09