从零开始手撸CSS加载动画【第一期】

 

先看一下本期CSS动画效果

这个动画是如何用CSS做出来的呢,有两个重点

  • 动画内容的形状如何用CSS呈现出来
  • 如何实现非线性旋转

下面我们一步一步的对这个动画进行剖析

目录

搭建HTML架构

CSS穿上新装


搭建HTML架构

通过效果可以看出包含一大一小两个元素,那么这里只需要使用一个div包含两个字div即可

<div class="loader loader-1">
     <div class="loader-outter"></div>
     <div class="loader-inner"></div>
</div>

CSS穿上新装

先看一下静止状态下的样子

第一步:先画出两个圆,通过 border 和 border-radius 来实现

.loader .loader-outter{
    position: absolute;
    width: 100%;
    height: 100%;
    border: 2px solid #f50057;
    border-radius: 50%;
}
.loader .loader-inner{
    position: absolute;
    width: 20px;
    height: 20px;
    top: clac(50% - 10px);
    left: clac(50% - 10px);
    border: 2px solid #f50057;
    border-radius: 50%;
}

第二步:实现缺口,缺口部分可以看成是颜色为透明的,这里只需要对相应的方向设置边框颜色为透明即可

.loader .loader-outter {
    border-left-color: transparent;
}
.loader .loader-linner{
    border-top-color: transparent;
}

但是发现这个与我们想要的效果还是存在一些差别

第三步:实现尖状效果,这里一定要注意“尖”的方向

.loader .loader-outter {
    border-bottom: 0;
}
.loader .loader-linner{
    border-right: 0;
}

第四步:动起来,毫无疑问,这里用到的是CSS中的animation

animation: name duration timing-function delay iteration-count direction;

它的属性值分别是:动画名,动画时间,速度曲线,动画开始延迟时间,动画播放次数(默认值为1,infinite:表示无限次),是否反向播放。

  • 转动

这里使用CSS的2D转换。使元素从0度到360度,另一个相反的从360度到0度。不要忘记做兼容处理

@keyframes loader-outter
{
from {
    transform: rotate(0deg);
    -ms-transform: rotate(0deg);		/* IE 9 */
    -webkit-transform: rotate(0deg);	/* Safari and Chrome */
    -o-transform: rotate(0deg);		/* Opera */
    -moz-transform: rotate(0deg);
}
to {
    transform: rotate(360deg);
    -ms-transform: rotate(360deg);		/* IE 9 */
    -webkit-transform: rotate(360deg);	/* Safari and Chrome */
    -o-transform: rotate(360deg);		/* Opera */
    -moz-transform: rotate(360deg);
}
@-moz-keyframes loader-outter  ........
@-webkit-keyframes loader-outter  .......

@keyframes loader-inner
{
from {
    transform: rotate(360deg);
    -ms-transform: rotate(360deg);		/* IE 9 */
    -webkit-transform: rotate(360deg);	/* Safari and Chrome */
    -o-transform: rotate(360deg);		/* Opera */
    -moz-transform: rotate(360deg);
}
to {
    transform: rotate(0deg);
    -ms-transform: rotate(0deg);		/* IE 9 */
    -webkit-transform: rotate(0deg);	/* Safari and Chrome */
    -o-transform: rotate(0deg);		/* Opera */
    -moz-transform: rotate(0deg);
}
@-moz-keyframes loader-inner  ........
@-webkit-keyframes loader-inner  .......
  • 曲线设定

这里我们可以使用贝塞尔曲线,好处是可以完全根据自己的意愿来控制。如果大家对贝塞尔曲线不是很理解的可以在下方评论,后期可以专门来讲解一下贝塞尔曲线。

.loader .loader-outter {
    -webkit-animation: loader-outter 1s cubic-bezier(.42, .61, .58, .41) infinite;
    animation: loader-outter 1s cubic-bezier(.42, .61, .58, .41) infinite;
}
.loader .loader-linner{
    -webkit-animation: loader-outter 1s cubic-bezier(.42, .61, .58, .41) infinite;
    animation: loader-outter 1s cubic-bezier(.42, .61, .58, .41) infinite;
}

最后就可以得到我们想要的加载动画效果啦

如果感觉还不错的话,可以点赞+关注,后面我也会出越来越好的作品。

完整源码关注微信公众号《前端筱园》,回复“CSS动画”获取

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端筱园

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值