Heim >Web-Frontend >CSS-Tutorial >Warum funktioniert mein CSS-Übergang nicht bei ausgeblendeten Elementen?

Warum funktioniert mein CSS-Übergang nicht bei ausgeblendeten Elementen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-15 06:29:02218Durchsuche

Why Doesn't My CSS Transition Work on Hidden Elements?

CSS-Übergang funktioniert zunächst nicht bei ausgeblendeten Elementen

Beim Versuch, die Eigenschaft eines ausgeblendeten Elements mithilfe von CSS-Übergängen zu animieren, kann es zu einem Problem kommen Problem, bei dem das Element sofort an seiner endgültigen Position angezeigt wird. Dies liegt an der Beziehung zwischen dem CSS Object Model (CSSOM) und dem Document Object Model (DOM).

Die Rolle von Reflow und CSSOM

CSS-Übergänge bestimmen ihren Anfangszustand basierend auf den berechneten Stilen eines Elements. Wenn ein Element jedoch display:none hat, ignoriert der Browser seine berechneten Stile, da das Element für das CSSOM praktisch unsichtbar ist.

Wenn Sie in Ihrem Szenario den Übergang auf .b auslösen, hat es keinen berechneten Stil , da es versteckt ist. Daher kann der Übergang nicht ordnungsgemäß initialisiert werden.

Erzwingen eines Reflows

Um dieses Problem zu lösen, können Sie den Browser zwingen, die berechneten Stile des ausgeblendeten Elements vor dem Start zu aktualisieren der Übergang. Dies geschieht durch Auslösen eines Reflows.

Reflow ist der Prozess, bei dem der Browser das Layout und die berechneten Stile der gesamten Seite neu berechnet. Dies kann durch bestimmte DOM-Methoden oder bei Bedarf durch den Browser selbst ausgelöst werden, beispielsweise wenn der Bildschirm aktualisiert wird.

Mit der requestAnimationFrame()-API können Sie den Browser auffordern, kurz vor dem nächsten Malen einen Reflow durchzuführen Der Vorgang erfolgt. Dadurch wird sichergestellt, dass die berechneten Stile Ihres Elements auf dem neuesten Stand sind, wenn der Übergang beginnt.

Aktualisierter Code

$('button').on('click', function () {
  $('.b').show(); // Apply display:block synchronously

  requestAnimationFrame(() => {
    // Force a reflow
    document.body.offsetHeight;

    // Trigger the transitions
    $('.b').css('right', '80%');
    $('.a').css('right', '80%');
  });
})

Das obige ist der detaillierte Inhalt vonWarum funktioniert mein CSS-Übergang nicht bei 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