Unit Two: HTML&CSS(11)—CSS(07) 过渡&动画
1. 过渡<transition>
-
通过过渡可以指定一个属性发生变化时的切换方式。
- 目的:动画转场效果,提供用户体验。
-
属性值:
-
过渡属性:
<transition-property:element>
- 指定要过渡的属性。
- 多个属性使用
,
隔开。 - 所有属性都需要过渡,使用
:all
。 - 大部分属性都支持过渡效果。注意过渡时,必须从一个有效值到另一个有效值。
-
过渡持续时间:
<transition-duration:time>
- 时间单位: s 和 ms。
- 1s = 1000ms
- 时间单位: s 和 ms。
-
过渡运动效果:
<transition-timing-function:time>
- 可选值:
<:ease>
淡入淡出<:ease-out>
淡出加强<:ease-in>
淡入加强<:ease-in-out>
淡入淡出加强<linear>
匀速<:cubic-bezier()>
贝塞尔曲线<steps(),start/end>
分步过渡start
每步开始时启动end
每步结束时启动
- 可选值:
-
过渡延迟时间
<transition-duration:time>
- 等待相应时间执行过渡。
-
-
简写属性:
<transition>
可以可以同时设置过渡相关的所有属性。- 第一个时间为持续时间。
- 第二个时间为延迟时间。
-
米兔过渡练习
<!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> .box1 { width: 132px; height: 271px; background-image: url(./动画/bigtap-mitu-queue-big.png); margin: 0px auto; background-position: 0 0; transition: all 1s steps(4); } .box1:hover { background-position: -528px; } .clearfix::before, .clearfix::after { content: ''; display: table; clear: both; } .box1:hover .box3 { margin-left: 900px; } </style> </head> <body> <div class="box1 clearfix"> </div> </body> </html>
2. 动画<animation>
-
动画和过渡类似,可以实现一些动态效果。
-
过渡需要某个属性发生变化才能触发。动画可以自动触发和循环。
-
@keyframes
动画设置步骤:@keyframes test { /* 动画开始位置 */ from { margin-left: 0%; } /* 动画结束位置 */ to { margin-right: 100%; } }
-
动画属性
-
<animation-name:keyframes>
-
<animation-duration:time>
-
<animation-timing-function:ease>
-
<animation-delay:time>
-
动画执行次数:
<animation-iteration-count:nth/infinite>
-
动画方向:
<animation-direction:normal;reverse;alternative;alternative-reverse>
<:normal>
:默认值, 从from到to。<:reverse>
:从to到from。<:alternative>
: 从from向to运行, 重复执行时反向。<:alternative-reverse>
:从to向from运行, 重复执行时反向。
-
动画执行状态:
<animation-play-state: running;pause;>
- 设置鼠标移入时动画运行状态。
-
动画结束模式:
<animation-fill-mode:none;forwards;backwards;>
- 可选值:
<:none>
动画结束后回到默认位置。<:forwards>
动画结束后停在结束位置。<:backwards>
动画延时等待时,就会处于开始位置。<:both>
结合了forwards和backwards两个的特点。
- 可选值:
-
练习1:奔跑的少年
<!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> .run { width: 256px; height: 256px; background-image: url(./动画/bg2.png); margin: 0 auto; animation: test 1s steps(5) 2s infinite normal; } /* 创建关键帧 */ @keyframes test { from { background-position-x: 0%; } to { background-position-x: 100%; } } </style> </head> <body> <div class="run"></div> </body> </html>
-
练习2:小球落下
<!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> .outer { height: 500px; border-bottom: solid 10px saddlebrown; margin: 50px auto; /* 外边距重叠,开启bfc */ overflow: hidden; } .box { width: 100px; height: 100px; border-radius: 50%; background-color: aqua; animation: ball 2s 2s 1 ease-in both; } @keyframes ball { from { animation-delay: 2s; margin-top: 0px; } 15% { margin-top: 400px; animation: 2s 0s cubic-bezier(.05, 1.05, .57, .94); } 30% { margin-top: 100px; animation: 1.5s 0s cubic-bezier(.74, .07, .93, .73); } 50% { margin-top: 400px; animation: 1.0s 0s cubic-bezier(.05, 1.05, .57, .94); } 75% { margin-top: 250px; animation: 0.5s 0s cubic-bezier(.74, .07, .93, .73); } 85% { margin-top: 400px; animation: 0.3s 0s cubic-bezier(.05, 1.05, .57, .94); } 95% { margin-top: 350px; animation: 0.1s 0s cubic-bezier(.74, .07, .93, .73); } to { margin-top: 400px; /* animation: 0.1s 0s ease-in; */ } } </style> </head> <body> <div class="outer"> <div class="box"></div> </div> </body> </html>
-