По умолчанию анимации CSS запускаются сразу после загрузки страницы, однако их можно отложить с помощью свойства animation-delay
. При запуске приведенного ниже фрагмента прямоугольник не сжимается по вертикали, пока не пройдет несколько секунд.
Почему это выглядит так «ждет» и как я могу это исправить?
/* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ INITIAL /////////////////////////////// */
html,
body {
height: 100%;
}
body {
display: flex;
margin: 0;
font-family: sans-serif;
}
p {
overflow: hidden;
max-height: 100rem;
width: 10rem;
margin: auto;
padding: 4rem 1rem;
background-color: #f8f8f8;
color: #222;
text-align: center;
}
/* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ANIMATIONS ///////////////////////////// */
.contract-ht {
animation-name: contract-height;
animation-duration: 2s;
animation-fill-mode: forwards;
}
@keyframes contract-height {
100% {
max-height: 0;
}
}
<p class="contract-ht">shrink me vertically</p>
РЕДАКТИРОВАТЬ: я добавил фрагмент с преобразованием масштаба рядом с анимацией высоты, чтобы рядом можно было увидеть, что анимация высоты начинается значительно медленнее, чем анимация scale
. Крайняя левая анимация почти начинается, когда заканчивается правая. Я хочу, чтобы левые начали заметно уменьшаться одновременно с правыми. Они оба имеют одинаковую продолжительность, почему анимация на основе max-height
задерживается, когда я не использую animation-delay
?
Фрагмент ниже
/* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ INITIAL /////////////////////////////// */
html,
body {
height: 100%;
}
body {
display: flex;
margin: 0;
font-family: sans-serif;
}
p {
overflow: hidden;
max-height: 100rem;
width: 10rem;
margin: auto;
padding: 4rem 1rem;
background-color: #f8f8f8;
color: #222;
text-align: center;
}
/* \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ANIMATIONS ///////////////////////////// */
.contract-ht {
animation-name: contract-height;
animation-duration: 2s;
animation-fill-mode: forwards;
}
@keyframes contract-height {
100% {
max-height: 0;
}
}
/* added these two css rules below */
.scale-ht {
animation-name: scale-height;
animation-duration: 2s;
animation-fill-mode: forwards;
}
@keyframes scale-height {
100% {
transform: scaleY( 0 );
}
}
<p class="contract-ht">shrink me vertically</p>
<!-- added the element below -->
<p class="scale-ht">scale my height</p>