CSS 属性animation-direction 决定动画遵循的方向:向前、向后或在这两个方向之间交替,创建前后运动。
使用简写属性 animation是一次配置所有动画属性的常见且简单的方法。
属性值
normal : 动画在每个循环中向前推进。当动画完成一个循环后,它实际上会重置到初始状态并再次开始。此行为是默认设置。
reverse: 在每个循环期间,动画向后运行。这意味着一旦完成一个循环,动画就会重置为最终状态并再次开始。
动画的步骤向后运行,包括缓动函数的反转。
alternate: 动画的每个循环交替改变方向,从第一次迭代开始,向前移动。区分偶数和奇数周期的计数从 1 开始。
alternate-reverse: 在动画的每个周期中,方向都会发生变化,从向后移动的第一次迭代开始。区分偶数和奇数周期的计数从 1 开始。
注意:当animation-* 属性上有多个逗号分隔值时指定后,这些值将按照动画名称出现的顺序应用于动画。
注意:定义 CSS 滚动驱动动画时,animation-iteration-count 的值决定了动画在时间轴进度过程中重复的次数。如果没有为animation-iteration-count指定值,则动画仅执行一次。 infinte 是一个有效值,但在 CSS 滚动驱动动画的情况下可能会导致动画无法工作。
语法
animation-direction = <single-animation-direction>#
<single-animation-direction> = normal | reverse | alternate | alternate-reverse
适用范围
所有 HTML 元素,::before 和 ::after 伪元素。
CSS animation-direction: normal值
以下示例演示了值为normal的动画方向。
CSS 动画方向属性决定动画如何通过其关键帧运行。
在此示例中,使用值法线。
法线使动画向前运行。
<html>
<head>
<style>
/* 内容垂直和水平居中 */
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
/* Styling the container for the boxes */
.container {
display: flex;
justify-content: space-around;
align-items: center;
}
/* 使用“normal”动画设置盒子的样式 */
.normal-box {
width: 100px;
height: 100px;
margin: 20px;
background-color: #3498db;
animation-duration: 2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-name: moveNormal;
animation-direction: normal; /* 动画从开始到结束连续移动 */
}
/* 'moveNormal' 动画的关键帧 */
@keyframes moveNormal {
from {
transform: translateX(0);
}
to {
transform: translateX(200px); /* 将盒子水平向右移动 */
}
}
</style>
</head>
<body>
<div class="container">
<div class="normal-box"></div> <!-- Box with 'normal' animation -->
</div>
</body>
</html>
CSS animation-direction: alternate值
以下示例演示了animation-direction,其值为 alternate值。
CSS 动画方向属性决定动画的方式运行其关键帧。
在此示例中,使用了值alternate。
alternate 导致动画运行
<html>
<head>
<style>
/* 内容垂直和水平居中 */
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
/* 为盒子设计容器的样式 */
.container {
display: flex;
justify-content: space-around;
align-items: center;
}
/* Styling for the box with 'alternate' animation */
.alternate-box {
width: 100px;
height: 100px;
margin: 20px;
background-color: #e74c3c;
animation-duration: 2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-name: moveAlternate;
animation-direction: alternate; /* Animation oscillates back and forth */
}
/* Keyframes for the 'moveAlternate' animation */
@keyframes moveAlternate {
from {
transform: translateX(0);
}
to {
transform: translateX(200px); /* Moves the box back and forth horizontally */
}
}
</style>
</head>
<body>
<div class="container">
<div class="alternate-box"></div> <!-- Box with 'alternate' animation -->
</div>
</body>
</html>
CSS animation-direction: reverse值
以下示例演示值为reverse的动画方向。
CSS 动画方向属性决定动画如何在其关键帧中运行。
在此示例中,值反转
相反会导致动画在每个周期向后运行。
<html>
<head>
<style>
/* Centering the content vertically and horizontally */
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
/* Styling the container for the boxes */
.container {
display: flex;
justify-content: space-around;
align-items: center;
}
/* Styling for the box with 'reverse' animation */
.reverse-box {
width: 100px;
height: 100px;
margin: 20px;
background-color: #e74c3c;
animation-duration: 2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-name: moveReverse;
animation-direction: reverse; /* Animation oscillates backwards */
}
/* Keyframes for the 'moveReverse' animation */
@keyframes moveReverse {
from {
transform: translateX(0);
}
to {
transform: translateX(200px); /* Moves the box back and forth horizontally */
}
}
</style>
</head>
<body>
<div class="container">
<div class="reverse-box"></div> <!-- Box with 'reverse' animation -->
</div>
</body>
</html>
CSS animation-direction: alternate-reverse
下面的示例演示了值为alternate-reverse的animation-direction。
CSSanimation-direction属性决定如何动画通过其关键帧运行。
在此示例中,使用值alternate-reverse。
相反的原因每个周期反转其方向的动画。
<html>
<head>
<style>
/* Centering the content vertically and horizontally */
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
/* Styling the container for the boxes */
.container {
display: flex;
justify-content: space-around;
align-items: center;
}
/* Styling for the box with 'alternate-reverse' animation */
.alt-reverse-box {
width: 100px;
height: 100px;
margin: 20px;
background-color: #e74c3c;
animation-duration: 2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-name: moveAltReverse;
animation-direction: alternate-reverse; /* Animation oscillates backwards and then changes the direction */
}
/* Keyframes for the 'moveAltReverse' animation */
@keyframes moveAltReverse {
from {
transform: translateX(0);
}
to {
transform: translateX(200px); /* Moves the box back and forth horizontally */
}
}
</style>
</head>
<body>
<div class="container">
<div class="alt-reverse-box"></div> <!-- Box with 'alternate-reverse' animation -->
</div>
</body>
</html>