Основная проблема с вашими переходными элементами заключается в том, что вы хотите, чтобы они занимали одно и то же пространство в DOM в одно и то же время (даже если визуально один входит и один существует - это делается только через transforms
, но два элемента нуждаются в занимать такое же место в DOM).
Поэтому вам нужно дать один из них position:absolute
и использовать CSS для его размера и правильного позиционирования, чтобы соответствовать точному положению и размеру, которые он будет иметь, если у него нет position:absolute
(то есть то, что он будет иметь, когда не будет trasitioning). ).
Вот рабочий пример . Обратите внимание, что вашим может потребоваться применить разные стили к другому элементу.
Поскольку вы не предоставили минимальный воспроизводимый пример с собственной разметкой, узнать это невозможно.
В приведенном выше примере я дал следующий <div>
(входящий)
position: absolute;
width: 100%;
top: 60px;
left: 0;
Если вы решите обернуть все свои <router-view>
в общий элемент-обертку с position:relative
, top
должно быть 0
(в примере 60px
учитывает высоту <nav>
).
Примечание: и да , как уже отмечали другие, вам не нужно mode="in-out"
. Но это все еще оставляет вас с проблемой позиционирования.
Редактировать: Я играл еще с двумя примерами.
- one с использованием контейнера flexbox из
height:100vh
, где верхний и нижний элементы не растут, а средний растет. Когда средний элемент слишком большой, он становится прокручиваемым.
- еще один , где я играл с эффектами перехода и Bootstrap Vue.