Как я могу сделать этот CSS анимации
В приведенном ниже примере вы можете увидеть, как коробки немного прыгают, как я могу сделать этот переход плавным?
.container {
text-align: center;
margin-top: 30px;
}
.box {
background: rgba(0, 10, 103, 0.5);
height: 50px;
width: 50px;
border: 3px solid rgba(0, 10, 103, 0.9);
margin: 10px;
display: inline-block;
animation: updn 1s infinite ease-out;
}
.box:nth-child(2) {
animation-delay: 1.2s;
}
.box:nth-child(3) {
animation-delay: 1.4s;
}
@keyframes updn {
0% {
transform: translateY(-10px) translateX(10px);
}
50% {
transform: translateY(0px);
}
75% {
transform: translateY(10px);
}
100% {
transform: translateY(0px) translateX(0px);
}
}
<div class="container">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
5 ответов:
Если вы спросите меня, ваша начальная точка в
0%
должна начинаться с0px
, но это только я:
.container { text-align: center; margin-top: 30px; } .box { background: rgba(0, 10, 103, 0.5); height: 50px; width: 50px; border: 3px solid rgba(0, 10, 103, 0.9); margin: 10px; display: inline-block; animation: updn 1s infinite ease-out; } .box:nth-child(2) { animation-delay: 1.2s; } .box:nth-child(3) { animation-delay: 1.4s; } @keyframes updn { 0% { transform: translateY(0px) translateX(0px); } 50% { transform: translateY(0px); } 75% { transform: translateY(10px); } 100% { transform: translateY(0px) translateX(0px); } }
<div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div>
А как насчет этого
.container { text-align: center; margin-top: 30px; } .box { background: rgba(0, 10, 103, 0.5); height: 50px; width: 50px; border: 3px solid rgba(0, 10, 103, 0.9); margin: 10px; display: inline-block; animation: updn 1s infinite ease-out; } .box:nth-child(2) { animation-delay: 1.2s; } .box:nth-child(3) { animation-delay: 1.4s; } @keyframes updn { 0% { transform: translateY(0px) translateX(10px); } 50% { transform: translateY(10px); } 75% { transform: translateY(10px); } 100% { transform: translateY(1px) translateX(10px); } }
<div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div>
Инкремент
animation-delay
на каждом.box
, выделите их с помощьюnth-child()
, чтобы добавить анимацию-задержку индивидуально, которая уже была добавлена,
.container { text-align: center; margin-top: 30px; } .box { background: rgba(0, 10, 103, 0.5); height: 50px; width: 50px; border: 3px solid rgba(0, 10, 103, 0.9); margin: 10px; display: inline-block; animation: updn 1s infinite ease-out; } .box:nth-child(2){ animation-delay:1s; /*This executes after 1st .box thus animation-delay for this should be 1s (i.e. overall animation time) */ } .box:nth-child(3){ animation-delay:2s; /*This executes after 2nd .box thus animation-delay for this should be 1s + 1s (i.e. overall animation time + delay of 2nd child) */ } @keyframes updn { 0% { transform: translateY(-10px) translateX(10px); } 50% { transform: translateY(0px); } 75% { transform: translateY(10px); } 100% { transform: translateY(0px) translateX(0px); } }
<div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div>
Похоже, что скачок между началом и концом анимации слишком велик, и это вызывает скачок.
Этот CSS должен улучшить гладкость:
@keyframes updn { 0% { transform: translateY(0px); } 25% { transform: translateY(-5px) translateX(5px); } 50% { transform: translateY(-10px) translateX(10px); } 75% { transform: translateY(-5px) translateX(5px); } 100% { transform: translateY(0px); } }
Вот как это выглядит:
.container { text-align: center; margin-top: 30px; } .box { background: rgba(0, 10, 103, 0.5); height: 50px; width: 50px; border: 3px solid rgba(0, 10, 103, 0.9); margin: 10px; display: inline-block; animation: updn 1s infinite ease-out; } .box:nth-child(2) { animation-delay: 1.2s; } .box:nth-child(3) { animation-delay: 1.4s; } @keyframes updn { 0% { transform: translateY(0px); } 25% { transform: translateY(-5px) translateX(5px); } 50% { transform: translateY(-10px) translateX(10px); } 75% { transform: translateY(-5px) translateX(5px); } 100% { transform: translateY(0px); } }
<div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div>
1: вы должны начать анимацию с
transform: translateY(0px) translateX(0px)
для плавного перехода и2:
transform
значение должно быть одинаковым в0%
и100%
ключевых кадров
.container { text-align: center; margin-top: 30px; } .box { background: rgba(0, 10, 103, 0.5); height: 50px; width: 50px; border: 3px solid rgba(0, 10, 103, 0.9); margin: 10px; display: inline-block; animation: updn 1s infinite; animation-timing-function: linear; } .box:nth-child(2) { animation-delay: 1.2s; } .box:nth-child(3) { animation-delay: 1.4s; } @keyframes updn { 0% { transform: translateY(0px) translateX(0px); } 25% { transform: translateY(-10px) translateX(-10px); } 50% { transform: translateY(0px) translateX(0px); } 75% { transform: translateY(10px) translateX(10px); } 100% { transform: translateY(0px) translateX(0px); } }
<div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div>