Ich habe zwei Elemente, und die Sichtbarkeit der obersten wird von einem v-if
auf einem einfachen booleschen Wert gesteuert.
Das erste Element in einer <transition>
Tag enthalten, genau wie pro die Vue Dokumentation .
Während dies jedoch eine verblassende Animation erzeugt, springt der Rest des Inhalts auf der Seite immer noch sehr ruckelig.
Wie kann ich einen Übergang erstellen, der auch die Position aller nachfolgenden Geschwister reibungslos transformiert?
Eine Geige demonstriert dieses Problem.
Sie müssen transition-group
verwenden und Ihr dynamisches div und statisches div
Und benutze diese CSS-Klassen
%Vor% Der wahre Trick besteht darin, position
beim Verlassen auf absolute
zu ändern, dann kann jeder andere Inhalt die richtige Position einnehmen.
Um mehr darüber zu erfahren, wie Vue Dinge animiert, sehen Sie sich bitte diesen FLIP-Erklärungsposten
anUnd bitte sehen Sie diese Arbeitsgeige Ссылка
Bearbeiten
Aus Versehen habe ich display: flex;
in .animated
class gesetzt, was dazu geführt hat, dass jedes innere Element auf seltsame Weise gerendert wurde.
Nun entferne ich also .animate
class vollständig und lege stattdessen transition: all 0.5s
und width:100%
auf jedes direkte innere Element von .wrapper
Meine letzte scss sieht so aus:
%Vor% Flex-Layout ist ein Erweiterungs-Thema, aber kurz für diesen besonderen Fall flex-direction: column
ist das Anordnen von Elementen eines Faltenbalgs vorher.
Wenn eines dieser Elemente die absolute Position hat, wird es im Flex-Layout ignoriert, so dass alle anderen Elemente auf den verfügbaren Platz verteilt werden.
Sehen Sie sich dieses Handbuch über flexbox und das letzte Geige arbeiten hoffe es hilft.
Sie können stattdessen eine slideDown / slideUp-Animation verwenden. Um dies zu erreichen, müssen Sie die Höhe eines Gleitelements nicht kennen. Die Prinzipien von max-height
transition erklären dort .
Dies führt dazu, dass Elemente unterhalb des Ziels animiert werden.
Schau dir mein Beispiel an, basierend auf deiner Geige.
vue js bietet verschiedene Übergangsklassen , die Sie richtig verwenden müssen, um den Übergang zu glätten Ich habe mit deinem Beispiel in dieser Geige mit etwas CSS versucht, schau mal.
%Vor%Einige Details aus der Dokumentation:
Es gibt sechs Klassen, die für Eingabe- / Freigabe-Übergänge angewendet werden.
Sie können auch CSS-Animationen verwenden, wo Sie in verschiedenen Phasen des Übergangs was tun können wird deine css-Eigenschaft sein, um deine Übergänge flüssiger zu machen, wie folgt und Demo Geige :
%Vor%Tags und Links javascript vue.js