1. transition过度动画
1.1 介绍
-
CSS trnasition提供了一种在更改CSS属性时控制动画速度的方法。
-
可以让CSS的属性变化称为一个秩序一段时间的过程,而不是默认的立即生效
-
比如在基础9中我们学到的trnaslate可以让一个元素移动,但瞬间就完成了
-
我们可以利用trnasition让这个完成的过程有一定的动画效果
-
属性可以控制的内容
- 哪些属性需要进度过度动画
- 何时开始,可以延时触发,比如2s后再进行动画
- 持续多久(duration)动画的持续时间
- 定义动画(匀速、先快后慢、先慢后快)timing
1.2 哪些CSS属性可以做动画?
-
可以通过MDN查询
- https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_animated_properties
-
月度CSS属性的文档说明
1.3 过渡动画 transition 的属性值
- transition-propety:指定过度属性的名称,比如width、left
- all:所有属性都执行动画
- none:所有属性都不执行动画
- transition-duration:动画的持续时间
- 单位可以说秒s或者是毫秒ms
- trnasition-timing-function:指定动画的变化曲线
- 通过这里查询
- https://developer.mozilla.org/zh-CN/docs/Web/CSS/transition-timing-function
- 通过这里查询
- transition-delay:指定延时时间
- 秒s
- transition:是整个动画的简写
- 顺序:过度属性 持续时间 变化曲线 延时时间
- transition-propety transition-duration transition-timming-function transition-delay
.box:hover {
transform: skew(10deg);
transition-property: transform;
transition-duration: 2s;
transition-timing-function: ease-in;
transition-delay: 1s;
}
2. animation 动画
前面我们学习了trnasition来进行过度动画,但过渡动画有如下缺点
- transition只能定义开始和结束状态,不能定义中间的过程
- transition不能重复执行
- transition需要在特定的状态下执行,比如某个元素修改了
那么animation就是更为复杂的动画,可以解决以上问题
2.1 animation介绍
- animation的定义
- 使用keyframes定义动画过程
- 配置动画的名称 持续时间 动画曲线 延时时间 执行次数 方向
2.2 @keyframes规则
- 使用@keyframes来定义整个动画的状态变化
- 定义动画发生的事件点,比如0% 20% 100%等
- 0%表示动画发生的第一时刻,100%表示动画的最终时刻
- 开始和结束还有两个特殊的别名,from和to
比如,我们要将一个盒子先向下平移,再向右,最后向上
@keyframes translateAnimation {
0% {
transform: translate(0, 0);
}
33% {
transform: translate(0, 100px);
}
66% {
transform: translate(200px, 100px);
}
100% {
transform: translate(200px, 0px);
}
}
2.3 animation的属性
- animation-name:指定定义的动画,也就是@keyframes定义的动画名称
- animation-duration:动画的持续时间
- animation-timming-function:动画曲线
- animation-delay:动画延时时间
- animation-iteration-count:动画执行的次数,infinite表示无限循环
- animation-direction:指定方向
- normal表示正序
- reverse返序
- animation-fill-mode:执行动画保留哪个值
- none: 回到没有执行动画的位置
- forwards:动画最后一帧的位置
- backwards:动画第一帧的位置
- animation-play-state:指定动画的暂停和运行(用JS控制)
2.4 animation的属性简写
- 顺序 动画名称 动画持续时间 动画曲线 动画延时时间 动画执行次数 动画方向 动画最后停留的帧 动画执行状态
- animation-name animation-duration animation-timming-function animation-delay animation-iterration-count animation-direction animation-fill-mode animation-play-state
举例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.box {
width: 100px;
height: 100px;
background-color: pink;
animation: translateAnimation 2s ease 1s 2 normal forwards;
}
@keyframes translateAnimation {
0% {
transform: translate(0, 0);
}
33% {
transform: translate(0, 100px);
}
66% {
transform: translate(200px, 100px);
}
100% {
transform: translate(200px, 0px);
}
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>