如何在关键帧内的不同点重复使用 CSS 中的动画?
How to re-use animations in CSS at different points within the keyframes?
我的目的是制作一个父方块,其中包含四个较小的子方块。我想要一个动画让这四个较小的立方体在父立方体中移动。我首先制作一个立方体并像这样移动它:
.parent {
background-color: aliceblue;
height: 400px;
width: 400px;
margin: 25px;
padding: 25px;
}
.child{
background: black;
position: absolute;
height:100px;
width:100px;
animation: move_around 5s ease-in-out infinite backwards;
}
@keyframes move_around {
0% {
transform: translateX(0%);
}
25% {
transform:translateY(300%);
}
50% {
transform:translateY(300%) translateX(300%);
}
75% {
transform: translateX(300%);
}
}
<div class="parent">
<div class='child'></div>
</div>
不过,我打算做四个这样的小立方体,我希望它们从每个角开始。当然,我可以通过添加另一个 child
并向其添加新的自定义动画来手动添加另一个立方体,如下所示:
.parent {
background-color: aliceblue;
height: 400px;
width: 400px;
margin: 100px;
padding: 25px;
}
.child{
background: black;
position: absolute;
height:100px;
width:100px;
}
.top {
animation: move_around 5s ease-in-out infinite backwards
}
.bot {
animation: move_around_bot 5s ease-in-out infinite backwards
}
@keyframes move_around {
0% {
transform: translateX(0%);
}
25% {
transform:translateY(300%);
}
50% {
transform:translateY(300%) translateX(300%);
}
75% {
transform: translateX(300%);
}
}
@keyframes move_around_bot {
0% {
transform:translateY(300%) translateX(300%);
}
25% {
transform: translateY(0%) translateX(300%);
}
50% {
transform: translateY(0%) translateX(0%)
}
75% {
transform: translateX(0%) translateY(300%);
}
100% {
transform:translateY(300%) translateX(300%);
}
}
<div class="parent">
<div class='child top'></div>
<div class='child bot'></div>
</div>
但是,这似乎不是最好的方法。现在我有两个,行数增加了一倍。是否需要将四个立方体的行数再增加一倍?如果我想要更多立方体怎么办?我的方法在这方面似乎不太有用。
我意识到这里的第二个立方体和第一个立方体是一样的,除了它的动画基本上是帧数的 50% 'ahead'。有没有办法添加第 3、第 4 或第 N 个立方体,它们是帧的 25%、75% 或 X% 'ahead'?
您可以对第二个立方体使用 animation-delay: -1.25s
,对第三个立方体使用 -2.5s
,对最后一个立方体使用 -3.75s
。
你可以做这样的事情:
.parent img:nth-child(1){
animation-delay: 0s; /* change this to something else for each */
}
要更改动画延迟,更改开始的秒数,并更改所需的特定立方体,将顶部的参数更改为如下内容:
.parent img:nth-child(2){
是的。 animation-delay
会起作用。
.parent {
background-color: aliceblue;
height: 400px;
width: 400px;
margin: 25px;
padding: 25px;
}
.parent .child:nth-child(1){
animation-delay: 0s;
}
.parent .child:nth-child(2){
animation-delay: -1.25s;
}
.parent .child:nth-child(3){
animation-delay: -2.5s;
}
.parent .child:nth-child(4){
animation-delay: -3.75s;
}
.child{
background: black;
position: absolute;
height:100px;
width:100px;
animation: move_around 5s ease-in-out infinite backwards;
}
@keyframes move_around {
0% {
transform: translateX(0%);
}
25% {
transform:translateY(300%);
}
50% {
transform:translateY(300%) translateX(300%);
}
75% {
transform: translateX(300%);
}
}
<div class="parent">
<div class='child'></div>
<div class='child'></div>
<div class='child'></div>
<div class='child'></div>
</div>
我的目的是制作一个父方块,其中包含四个较小的子方块。我想要一个动画让这四个较小的立方体在父立方体中移动。我首先制作一个立方体并像这样移动它:
.parent {
background-color: aliceblue;
height: 400px;
width: 400px;
margin: 25px;
padding: 25px;
}
.child{
background: black;
position: absolute;
height:100px;
width:100px;
animation: move_around 5s ease-in-out infinite backwards;
}
@keyframes move_around {
0% {
transform: translateX(0%);
}
25% {
transform:translateY(300%);
}
50% {
transform:translateY(300%) translateX(300%);
}
75% {
transform: translateX(300%);
}
}
<div class="parent">
<div class='child'></div>
</div>
不过,我打算做四个这样的小立方体,我希望它们从每个角开始。当然,我可以通过添加另一个 child
并向其添加新的自定义动画来手动添加另一个立方体,如下所示:
.parent {
background-color: aliceblue;
height: 400px;
width: 400px;
margin: 100px;
padding: 25px;
}
.child{
background: black;
position: absolute;
height:100px;
width:100px;
}
.top {
animation: move_around 5s ease-in-out infinite backwards
}
.bot {
animation: move_around_bot 5s ease-in-out infinite backwards
}
@keyframes move_around {
0% {
transform: translateX(0%);
}
25% {
transform:translateY(300%);
}
50% {
transform:translateY(300%) translateX(300%);
}
75% {
transform: translateX(300%);
}
}
@keyframes move_around_bot {
0% {
transform:translateY(300%) translateX(300%);
}
25% {
transform: translateY(0%) translateX(300%);
}
50% {
transform: translateY(0%) translateX(0%)
}
75% {
transform: translateX(0%) translateY(300%);
}
100% {
transform:translateY(300%) translateX(300%);
}
}
<div class="parent">
<div class='child top'></div>
<div class='child bot'></div>
</div>
但是,这似乎不是最好的方法。现在我有两个,行数增加了一倍。是否需要将四个立方体的行数再增加一倍?如果我想要更多立方体怎么办?我的方法在这方面似乎不太有用。
我意识到这里的第二个立方体和第一个立方体是一样的,除了它的动画基本上是帧数的 50% 'ahead'。有没有办法添加第 3、第 4 或第 N 个立方体,它们是帧的 25%、75% 或 X% 'ahead'?
您可以对第二个立方体使用 animation-delay: -1.25s
,对第三个立方体使用 -2.5s
,对最后一个立方体使用 -3.75s
。
你可以做这样的事情:
.parent img:nth-child(1){
animation-delay: 0s; /* change this to something else for each */
}
要更改动画延迟,更改开始的秒数,并更改所需的特定立方体,将顶部的参数更改为如下内容:
.parent img:nth-child(2){
是的。 animation-delay
会起作用。
.parent {
background-color: aliceblue;
height: 400px;
width: 400px;
margin: 25px;
padding: 25px;
}
.parent .child:nth-child(1){
animation-delay: 0s;
}
.parent .child:nth-child(2){
animation-delay: -1.25s;
}
.parent .child:nth-child(3){
animation-delay: -2.5s;
}
.parent .child:nth-child(4){
animation-delay: -3.75s;
}
.child{
background: black;
position: absolute;
height:100px;
width:100px;
animation: move_around 5s ease-in-out infinite backwards;
}
@keyframes move_around {
0% {
transform: translateX(0%);
}
25% {
transform:translateY(300%);
}
50% {
transform:translateY(300%) translateX(300%);
}
75% {
transform: translateX(300%);
}
}
<div class="parent">
<div class='child'></div>
<div class='child'></div>
<div class='child'></div>
<div class='child'></div>
</div>