<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div class="box">div>
<div class="box">div>
<div class="box">div>
<div class="box">div>
body>
html>
.box {
width: 100px;
height: 100px;
background-color: red;
border-radius: 50%;
margin-bottom: 20px;
}
.box:nth-child(2n + 1) {
animation: move 2s linear infinite alternate;
}
.box:nth-child(2n) {
animation: move 2s linear infinite alternate-reverse forwards 1s;
}
.box:hover {
animation-play-state: paused;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(400px, 0);
}
}
animation-delay
定义动画于何时开始,即从动画应用在元素上到动画开始的这段时间的长度。
0s,代表动画在应用到元素上后立即开始执行
正负值皆可。定义一个负值会让动画立即开始。但是动画会从它的动画序列中某位置开始。例如,如果设定值为-1s,动画会从它的动画序列的第1秒位置处立即开始。
animation-direction
指示动画是否反向播放
normal
,每个循环内动画向前循环,就是说每个动画循环结束,动画重置到起点重新开始
alternate
动画交替反向运行。带时间功能的函数也反向,比如,ease-in 在反向时成为ease-out。计数取决于开始时是奇数迭代还是偶数迭代。小球的循环运动通常使用该值。
reverse
反向运行动画,每周期结束后,从动画结束的尾部到头反向运行。
alternate-reverse
反向交替运行动画。即动画第一次运行时是反向的,然后下一次是正向,后面依次循环。决定奇数次或偶数次的计数从1开始。
animation-duration
指定一个动画周期的时长。
默认值为0s,表示无动画,直接到最后的状态
time,表达一个动画周期的时长,单位为秒(s)或者毫秒(ms),无单位值则无效。
animation-fill-mode
设置CSS动画在执行之前和之后如何将样式应用于其目标。
none
当动画未执行时,动画将不会将任何样式应用于目标
forwards
动画完成后,元素状态保持为最后一帧的状态。
backwards
动画将在应用于目标时立即应用第一个关键帧中定义的值,并在animation-delay期间保留此值。 第一个关键帧取决于animation-direction的值
both
动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性
animation-iteration-count
定义动画在结束前运行的次数,可以是1次,也可以无限循环。如果指定了多个值,每次播放动画时,将使用列表中的下一个值,在使用最后一个值后循环回第一个值。
默认值为1,表示只运行一次
infinite
无限循环播放动画.
动画播放的次数。可以用小数
定义循环,来播放动画周期的一部分:例如,0.5 将播放到动画周期的一半。但不可设为负值。
animation-name
属性指定应用的一系列动画,每个名称代表一个由@keyframes定义的动画序列
无默认值
由@keyframes
定义的动画序列名
animation-play-state
定义一个动画是否运行或者暂停。可以通过查询它来确定动画是否正在运行。另外,它的值可以被设置为暂停和恢复的动画的重放。
恢复一个已暂停的动画,将从它开始暂停的时候,而不是从动画序列的起点开始在动画。
无默认值
running
当前动画正在运行。
paused
当前动画已被停止。
animation-timing-function
定义CSS动画在每一动画周期中执行的节奏。
ease
可能值为一或多个
。比如ease-in、ease-out、ease-in-out、linear、step-start、step-end、cubic-bezier(0,.7,.57,.81)
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div id="box">div>
body>
html>
#box {
width: 100px;
height: 100px;
background-color: red;
border-radius: 50%;
animation: move 2s linear infinite alternate;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(300px, 0);
}
}
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div id="box">div>
body>
html>
#box {
width: 100px;
height: 100px;
background-color: red;
border-radius: 50%;
animation: move 2s steps(50) infinite alternate;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(300px, 0);
border-radius: 0;
}
}
如果将steps()
的参数改为5
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div id="box">div>
body>
html>
#box {
height: 20px;
background: linear-gradient(#f0f, #f0f);
background-repeat: no-repeat;
border: 1px solid red;
background-size: 0;
animation: move 2s linear backwards infinite;
}
#box:hover {
animation-play-state: paused;
}
@keyframes move {
100% {
background-size: 100%;
}
}
小球运动结束不能沿着原路径动画返回
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div id="box">div>
body>
html>
#box {
width: 50px;
height: 50px;
background-color: red;
border-radius: 50%;
animation: move 2s linear;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(200px, 0);
}
}
按照定义的运动时长运动结束以后还是突兀的从头开始
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div id="box">div>
body>
html>
#box {
width: 50px;
height: 50px;
background-color: red;
border-radius: 50%;
animation: move 4s linear infinite;
}
@keyframes move {
0%,
66% {
transform: translate(0, 0);
}
33%,
100% {
transform: translate(200px, 0);
}
}
丝滑
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Static Templatetitle>
<link rel="stylesheet" href="./index.css" />
head>
<body>
<div id="box">div>
body>
html>
#box {
width: 50px;
height: 50px;
background-color: red;
border-radius: 50%;
animation: move 2s linear infinite alternate;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(200px, 0);
}
}
https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation
https://juejin.im/post/5cdd178ee51d456e811d279b