Verstehen des Problems
Im beschriebenen Szenario gibt es zwei Divs , von denen einer zunächst mit display:none ausgeblendet wird. Wenn das versteckte Div mit Methoden wie show() oder toggle() aufgedeckt wird, erfolgt der Eigenschaftsübergang nicht reibungslos. Stattdessen erscheint das Div sofort an der gewünschten Endposition.
Ursache des Verhaltens
Um dieses Verhalten zu verstehen, müssen wir uns mit der Beziehung zwischen dem CSSOM ( CSS Object Model) und das DOM (Document Object Model).
CSS-Übergänge basieren auf der Kenntnis der anfänglich berechneten Stilwerte des Elements, um die zu bestimmen Ausgangspunkt des Übergangs. Elemente mit display:none haben jedoch keine berechneten Stilwerte, da sie im CSSOM nicht als sichtbar gelten.
Einfluss von Reflow
Reflow ist eine Browseroperation, die eine Neuberechnung durchführt das Layout des Dokuments basierend auf Änderungen am DOM oder Stilregeln. Wenn display:none entfernt wird, initiiert der Browser einen Reflow, um das DOM und die berechneten Stilwerte zu aktualisieren.
Wenn im gegebenen Szenario der Übergang vor dem Reflow beginnt, werden die anfänglichen berechneten Stilwerte für das ausgeblendete Div wird ungültig sein, was zu einem plötzlichen Erscheinen führt.
Problem lösen
Option 1: Die Verwendung von $.animate()
$.animate() löst vor der Ausführung der Animation einen Reflow aus, um sicherzustellen, dass die berechneten Stilwerte aktuell sind.
Option 2: Manuelles Erzwingen eines Reflows
Mit requestAnimationFrame() können wir die Codeausführung vor dem nächsten Malen planen Betrieb. Innerhalb des Rückrufs können wir mit einer Methode wie document.body.offsetHeight einen Reflow erzwingen und dann sofort den Übergang auslösen, indem wir die gewünschten CSS-Eigenschaftswerte festlegen.
Fazit
Das plötzliche Erscheinen ursprünglich ausgeblendeter Elemente bei CSS-Übergängen ist auf das Fehlen gültiger berechneter Stilwerte zurückzuführen. Durch das Verständnis des Reflow-Prozesses und den Einsatz von Techniken zur Erzwingung eines Reflows können wir reibungslose Übergänge für zunächst verborgene Elemente gewährleisten.
Das obige ist der detaillierte Inhalt vonWarum funktionieren CSS-Übergänge nicht bei ursprünglich ausgeblendeten Elementen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!