CSS动画Animation全解

前言

在css中我们希望实现一个动画的效果,我们可以使用animation属性进行元素的操作,从而实现动画效果

本文就使用一个小demo来讲解一下

效果展示

代码实现

可以看到现在我们实现的是一只皮卡丘在移动

首先我们需要拿到这张gif图片i.gifer.com/4tym.gif

接下来我们就将它放在我们的页面中

html

html 复制代码
<div class="login">
    <div class="login-wrappe">
      <div class="avatar">
        <img src="https://i.gifer.com/4tym.gif" alt="" />
      </div>
    </div> 
 </div>

css

js 复制代码
.login {
  width: 100vw;
  height: 100vh;
  background-color: #fff;
  padding: 0 0.3rem;
  box-sizing: border-box;
  overflow: hidden; // 溢出隐藏.让其变为bfc容器

  .login-wrappe {
    width: 7.44rem;
    height: 12.77rem;
    border: 1px solid #ccc;
    margin: 0 auto;
    margin-top: 1rem;
    border-radius: 0.3rem;
    box-shadow: -0.25rem 0.25rem 0.6rem rgb(115, 115, 115);
    overflow: hidden;
    .avatar {
      width: 2.4rem;
      height: 2.4rem;
      margin: 1rem auto 0.77rem;
      overflow: hidden;
      img {
        width: 100%;
      }
    }
  }
}

目前的效果为:

可以看到这个动图是在原地动,我们只需要给他添加动画就能够实现让他看起来好像真的在跑

接下来我们定义一个动画的关键帧

css 复制代码
@keyframes move {
  0% {
    transform: translateX(-180px);
  }
  100% {
    transform: translateX(180px); /* 要移动的距离 */
  }
}

0% 这个关键帧时,元素的 transform 属性被设置为 translateX(-180px) ,这表示动画开始时,元素会向左平移 180 像素。

100% 这个关键帧时,transform 属性被设置为 translateX(180px) ,这意味着动画结束时,元素会向右平移 180 像素。

然后再对应的容器里添加一个animation

js 复制代码
 /* 动画名称,持续时间,速度曲线,迭代次数 */
 animation: move 2s ease-in-out infinite;

常见的动画速度曲线(缓动函数)包括:

  • linear :动画以恒定速度进行,没有加速或减速。
  • ease :动画开始时缓慢,然后加速,结束时再次缓慢。
  • ease-in :动画开始时缓慢,然后以正常速度进行。
  • ease-out :动画以正常速度开始,结束时缓慢。
  • ease-in-out :动画开始和结束时缓慢,中间速度正常。

动画的迭代次数可以是以下几种情况:

  • infinite :无限次循环播放。
  • 具体的整数,例如 25 等,表示动画播放的具体次数。

接下来我们就能看到这个效果了

animation需要配合@keyframes来使用,通过他们的结合使用是可以实现很复杂的动画效果的

animation的一般步骤如下:

  1. 定义关键帧动画
    使用 @keyframes 规则定义动画的关键帧。每个关键帧都指定了元素在某一时刻的样式。
css 复制代码
@keyframes slide {
  0% { transform: translateX(0); }
  50% { transform: translateX(100px); }
  100% { transform: translateX(0); }
}
  1. 将动画应用到元素
    使用 animation 属性将定义好的动画应用到元素上。可以设置动画名称、持续时间、速度曲线等参数。
css 复制代码
.animated-element {
  animation: slide 3s ease-in-out infinite;
}
  1. 调整动画参数
    可以进一步调整动画的各种属性,如:
  • animation-name: 动画名称
  • animation-duration: 动画持续时间
  • animation-timing-function: 速度曲线
  • animation-delay: 动画延迟启动时间
  • animation-iteration-count: 动画循环次数
  • animation-direction: 动画播放方向
  1. 结合其他 CSS 属性
    动画可以与其他 CSS 属性结合使用,如 transformopacity 等,创造出更复杂的视觉效果。
css 复制代码
@keyframes grow {
  0% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.5); opacity: 0.5; }
  100% { transform: scale(1); opacity: 1; }
}

.animated-element {
  animation: grow 2s ease-in-out infinite;
}
  1. 性能优化
    为了保证动画的流畅性,应该尽量避免触发昂贵的重排和重绘操作,优先使用 transformopacity 属性来驱动动画。

总结

本文介绍了CSS动画Animation的基础的使用用法,结合代码带大家实现了一个移动的皮卡丘

希望本文能够帮助你对Animation有更好的理解!!

相关推荐
薛一半12 分钟前
React的组件
前端·javascript·react.js
广州华水科技1 小时前
水库的单北斗GNSS变形监测系统是什么?主要有哪些应用?
前端
薛一半1 小时前
React三大属性之props
前端·javascript·react.js
用户5757303346241 小时前
🔥 前端必考!AJAX 数据请求全解析,async true/false 区别一次搞懂
javascript
Wect1 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:题解与思路解析
前端·算法·typescript
烤麻辣烫2 小时前
正则表达式快速掌握
前端·javascript·学习·正则表达式·html
长城20242 小时前
HTML5中可以省略属性值的11个属性总结
前端·html·html5·属性值·省略属性值
木斯佳2 小时前
前端八股文面经大全:小红书前端一面(2026-2-3)·面经深度解析
前端·状态模式
心之语歌3 小时前
flutter 父子组件互相调用方法,值更新
前端·javascript·flutter
岱宗夫up3 小时前
FastAPI进阶3:云原生架构与DevOps最佳实践
前端·python·云原生·架构·前端框架·fastapi·devops