Криво работает анимация css

Есть блок, изначальная высота 0px. Необходимо чтобы анимация сработала до той высоты блока, какова высота дочерних элементов. То есть конкретной высоты блока не знаем.

#sst {
  display:flex;
  align-items: center;
  gap:10px;
  height: 0;
  overflow: hidden;
  z-index: -1;
  opacity: 0;
  transition: all 150ms ease-in-out;
}
.control_open #sst {z-index: 3000; padding-top: 9px; height: auto; opacity: 1}

Пытаюсь так сделать, анимация работает только на padding, так как указана конкретная высота.

Можно выполнить таким образом

#sst {
  display:none;
  align-items: center;
  gap:10px;
  height: 0;
  overflow: hidden;
  animation: opp_up .5s ease-in-out normal forwards;
}

.control_open #sst {animation: opp_down .5s ease-in-out normal forwards}
@keyframes opp_down {from {padding-top: 0; height: 0; opacity: 0} to {padding-top: 9px; height: unset; opacity: 1}}
@keyframes opp_up {from {padding-top: 9px; height: unset; opacity: 1} to {padding-top: 0; height: 0; opacity: 0}}

Через js, присваивать блоку display:flex либо display:none.

Вся трудность в том, что в родель добавляется и удаляется дочерний блок. Либо родителя вовсе переносим на блок выше. Анимация каждый раз срабатывает, решается путем присваивания блоку display:none.

Вроде все отлично, но блин, возможно ли выполнить это не прибегая к js?

Лучше всего работает первый вариант, не приходится затрагивать js. Но не работает анимация высоты, так как не знаем какова собственно высота блока.


Ответы (0 шт):