#css #css-animations
Вопрос:
Мое намерение состоит в том, чтобы сделать родительский квадрат, содержащий четыре меньших дочерних куба. Я бы хотел, чтобы анимация заставляла эти четыре меньших куба перемещаться внутри родительского куба. Сначала я делаю один куб и перемещаю его вот так:
.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% кадров «впереди». Есть ли способ добавить 3-й, 4-й или N-й куб, который составляет 25%, 75% или X% кадров «впереди»?
Ответ №1:
Вы могли бы использовать animation-delay: -1.25s
для второго куба, -2.5s
для третьего и -3.75s
для последнего.
Ответ №2:
Вы могли бы сделать что-то вроде:
.parent img:nth-child(1){
animation-delay: 0s; /* change this to something else for each */
}
Чтобы изменить задержку анимации, измените секунды, с которых вы начинаете, и чтобы изменить нужный вам куб, измените параметр вверху на что-то вроде:
.parent img:nth-child(2){
Ответ №3:
Да 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>