вот этот момент x[currentTab].style.display = "none";
он сразу убирает элемент (скрывает), но display не анимируется.
Если есть желание чтобы форма по высоте изменялась плавно, то нужно чтобы анимировался контейнер по высоте. А для этого нужно следить за высотой внутрянки контейнера и выставлять значение height соответственно. Ну и на контейнер я думаю достаточно будет поставить transition обычный, без keyframe
тогда tabIn можно будет убрать в коде, скрытие можно не анимировать и делать сразу x[currentTab].style.display = "none";
Есть вариант другой, но он более сложный получится. Для этого необходимо чтобы блоки с инпутами были абсолютом друг под дружкой, но следить за высотой всё равно придется, иначе верстка поедет
WebEagle, В том то и дело, что я могу поставить задержку в одну секунду и вроде как не особо видно, что блок скрывается сразу (без анимации), но хотелось попробовать с анимкой
WebEagle, Я питался даже найти на кодпене (на гитхабе буду скоро искать) подобные квизы, но с анимацией. Я нахожу либо анимацию идеальную, но она на jqeury, что я не люблю. Либо ввобще без анимок
у form-container нужно будет играться с высотой, на него вешай анимацию css transition только на высоту, и обязательно добавить overflow: hidden и position: relative (иначе будет появляться скролл когда от маленькой формы к большой переходишь)
и выставляй ему высоту равной высоте текущего активного tab'а (offsetHeight)
Максим Иванов, вариаций с формами разных много, можно сделать например блок с overflow, и при переключении формы, старая уезжает влево, новая появляется справа. так же сочетание JS+CSS, основа на overflow, absolut, transition ставится на left. Тут только практика и насмотренность поможет)))
*Вообще я бы просто подглядел у кого то как это реализовано, есть подозрение что это делается как в простом слайдере с использованием горизонтальных сдвигов и overflow.