9-过度和动画

9-过度和动画

CSS表格

过渡(transition)

  • 通过过渡可以指定一个属性发生变化时的切换方式
  • 通过过渡可以创建一些非常好的效果,提升用户的体验

属性值

transition-property:指定要执行过渡的属性

  • 多个属性间使用,隔开;
  • 如果所有属性都需要过渡,则使用all关键字;
  • 大部分属性都支持过渡效果;
  • 注意过渡时必须是从一个有效数值向另外一个有效数值进行过渡;

transition-duration:指定过渡效果的持续时间

  • 时间单位:s 和 ms(1s=1000ms)

transition-delay:过渡效果的延迟,等待一段时间后在执行过渡

transition-timing-function:过渡的时序函数

  • linear匀速运动

  • ease 默认值,慢速开始,先加速后减速

  • ease-in 加速运动

  • ease-out 减速运动

  • ease-in-out 先加速后减速

  • cubic-bezier()来指定时序函数 https://cubic-bezier.com

  • ```
    steps()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    分步执行过渡效果,可以设置第二个值:

    - `end`,在时间结束时执行过渡(默认值)
    - `start`,在时间开始时执行过渡

    `transition`:可以同时设置过渡相关的所有属性

    - 只有一个要求,如果要写延迟,则两个时间中第一个是持续时间,第二个是延迟时间

    **示例**

    ```css
    /* transition: margin-left 2s 1s; */
    transition-property: margin-left;
    transition-duration: 2s;
    transition-delay: 1s;

transition

几种过渡效果对比

linear匀速运动

1
transition-timing-function: linear;

linear

ease 默认值,慢速开始,先加速后减速

1
transition-timing-function: ease;

ease

ease-in 加速运动

1
transition-timing-function: ease-in;

ease-in

ease-out 减速运动

1
transition-timing-function: ease-out;

ease-out

ease-in-out 先加速后减速

1
transition-timing-function: ease-in-out;

ease-in-out

cubic-bezier()来指定时序函数

1
transition-timing-function: cubic-bezier(0.17, 1.79, 0.68, -0.69);

cubic-bezier

steps()分步执行过渡效果

1
2
/* transition-timing-function: steps(2, end); */
transition-timing-function: steps(2);

steps-end

1
transition-timing-function: steps(2, start);

steps-start

实战米兔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.mitu{
width: 132px;
height: 271px;
margin: 40px auto;
background-image: url('./img/bigtap.png');
/* 确定初始的位置 */
background-position: 0, 0;
/* 三次转换 */
transition: 0.3s steps(3);
}
.mitu:hover{
/* 移动到的最终的位置 */
background-position: -396px 0;
}

米兔

动画

动画和过渡类似,都是可以实现一些动态的效果,不同的是

  • 过渡需要在某个属性发生变化时才会触发
  • 动画可以自动触发动态效果

设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤

1
2
3
4
5
6
7
8
9
@keyframes test {
from {
margin-left: 0;
}

to {
margin-left: 900px;
}
}

animation-name 指定动画的关键帧名称

animation-duration:指定动画效果的持续时间

animation-delay:动画效果的延迟,等待一段时间后在执行动画

animation-timing-function:动画的时序函数

animation-iteration-count 动画执行的次数

  • infinite 无限执行

animation-direction 指定动画运行的方向

  • normalfromto运行,每次都是这样,默认值
  • reversetofrom运行,每次都是这样
  • alternatefromto运行,重复执行动画时反向执行
  • alternate-reversetofrom运行,重复执行动画时反向执行

animation-play-state 设置动画的执行状态

  • running 动画执行,默认值
  • paused 动画暂停

animation-fill-mode 动画的填充模式

  • none 动画执行完毕,元素回到原来位置,默认值
  • forwards 动画执行完毕,元素会停止在动画结束的位置
  • backwards 动画延时等待时,元素就会处于开始位置
  • both 结合了forwardsbackwards

练习米兔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<style>
.mitu {
width: 132px;
height: 271px;
margin: 40px auto;
background-image: url('./img/bigtap.png');
/* 确定初始的位置 */
/* 三次转换 */
animation: run 0.3s steps(3);
}

@keyframes run {
form {
background-position: 0, 0;
}

to {
background-position: -396px 0;
}
}
</style>

效果同上