Heim >Web-Frontend >CSS-Tutorial >Warum funktionieren CSS-Übergänge nicht bei ursprünglich ausgeblendeten Elementen?

Warum funktionieren CSS-Übergänge nicht bei ursprünglich ausgeblendeten Elementen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-15 15:11:02477Durchsuche

Why Don't CSS Transitions Work on Initially Hidden Elements?

CSS-Übergänge funktionieren bei ursprünglich ausgeblendeten Elementen nicht

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn