css3动画

1,047 阅读3分钟

css3 动画是什么

       CSS 动画 ( CSS Animations ) 是为层叠样式表建议的允许可扩展标记语言 ( XML ) 元素使用 CSS 的动画的模块。
      即指元素从一种样式逐渐过渡另一种样式的过程。
      常见的动画效果有很多,如平移、旋转、缩放等等,复杂动画则十多个简单动画的组合。

      CSS 实现动画的几种方式,有如下几种:

  • transition 实现渐变动画
  • transform 转变动画
  • animation 实现自定义动画

实现方式

transition 实现渐变动画

      transition 的属性如下:

  • property: 填写需要变化的 CSS 属性
  • duration: 完成过渡效果需要的事件单位( s 或者 ms )
  • timing-function: 完成效果的速度曲线
  • delay: 动画效果的延迟触发时间 其中 timing-function 的值有如下: 值 | 描述 | | ----------------------------- | --------------------------------------------- | | linear | 匀速(等于 cubic-bezier(0,0,1,1)) | | ease | 从慢到快再到慢(cubic-bezier(0.25,0.1,0.25,1)) | | ease-in | 慢慢变快(等于 cubic-bezier(0.42,0,1,1)) | | ease-out | 慢慢变慢(等于 cubic-bezier(0,0,0.58,1)) | | ease-in-out | 先变快再到慢(等于 cubic-bezier(0.42,0,0.58,1)),渐显渐隐效果 | | cubic-bezier(n,n,n,n) | 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值

注意:

      并不是所有属性都能使用过度的,如 diaplay:none<->display:block

      实现鼠标移动上去发生变化动画效果,代码如下:

 1     <style>
 2       .base {
 3         width: 100px;
 4         height: 100px;
 5         margin: 100px auto;
 6         background-color: pink;
 7         border-width: 5px;
 8         border-style: solid;
 9         border-color: aqua;
10          transition-duration: 2s;
11          transition-timing-function: ease-in;
12          transition-delay: 500ms;
13        }
14      
15        /*简写*/
16        /*transition: all 2s ease-in 500ms;*/
17        .base:hover {
18          width: 200px;
19          height: 200px;
20          background-color: palegreen;
21          border-width: 10px;
22          border-color: yellow;
23        }
24      </style>
25      <div class="base"></div>

动画.gif

transform 转变动画

      包函四个常用功能:

  • translate: 位移
  • scale: 缩放
  • rotate: 旋转
  • skew: 倾斜       一般配合 teansition 过度使用

注意:

      transform 不支持 inline 元素,使用前把它变成 block

      可以看到盒子发生了旋转,倾斜,平移,放大代码如下:

 1     <style>
 2       .base {
 3         width: 100px;
 4         height: 100px;
 5         margin: 100px auto;
 6         background-color: pink;
 7         border-width: 5px;
 8         border-style: solid;
 9         border-color: aqua;
10          transition-duration: 2s;
11          transition-timing-function: ease-in;
12          transition-delay: 500ms;
13        }
14      
15        .base2 {
16          transform: none;
17          transition-property: transform;
18          transition-delay: 5ms;
19        }
20      
21        .base2:hover {
22          transform: scale(0.8, 1.5) rotate(35deg) skew(5deg) translate(15px, 25px);
23        }
24      </style>
25      <div class="base base2"></div>

动画1.gif

animation 实现自定义动画

      animation是由 8 个属性的简写,分别如下:

属性描述属性值
animation-duration指定动画完成一个周期所需要时间,单位秒(s)或毫秒(ms),默认是 0
animation-timing-function指定动画计时函数,即动画的速度曲线,默认是 "ease"linear、ease、ease-in、ease-out、ease-in-out
animation-delay指定动画延迟时间,即动画何时开始,默认是 0
animation-iteration-count指定动画播放的次数,默认是 1
animation-direction 指定动画播放的方向默认是 normalnormal、reverse、alternate、alternate-reverse
animation-fill-mode指定动画填充模式。默认是 noneforwards、backwards、both
animation-play-state指定动画播放状态,正在运行或暂停。默认是 runningrunning、pauser
animation-name指定 @keyframes 动画的名称

      CSS 动画只需要定义一些关键的帧,而其余的帧,浏览器会根据计时函数插值计算出来,

      通过 @keyframes 来定义关键帧

      因此,如果我们想要让元素旋转一圈,只需要定义开始和结束两帧即可:

 1     @keyframes rotate{
 2         from{
 3             transform: rotate(0deg);
 4         }
 5         to{
 6             transform: rotate(360deg);
 7         }
 8     }

      from 表示最开始的那一帧,to 表示结束时的那一帧

      也可以使用百分比刻画生命周期

 1     @keyframes rotate{
 2         0%{
 3             transform: rotate(0deg);
 4         }
 5         50%{
 6             transform: rotate(180deg);
 7         }
 8         100%{
 9             transform: rotate(360deg);
10          }
11      }

定义好了关键帧后,下来就可以直接用它了:

 1     animation: rotate 2s;

总结

属性含义
transition(过度)用于设置元素的样式过度,和animation有着类似的效果,但细节上有很大的不同
transform(变形)用于元素进行旋转、缩放、移动或倾斜,和设置样式的动画并没有什么关系,就相当于color一样用来设置元素的“外表”
translate(移动)只是transform的一个属性值,即移动
animation(动画)用于设置动画属性,他是一个简写的属性,包含6个属性