Browser-Reflow-Problem beim CSS-Übergang
Beim Übergang von DOM-Elementen mit CSS3 ist es oft notwendig, einen Browser-Reflow zu erzwingen, um Animationen auszulösen. In Fällen, in denen das Ändern mehrerer CSS-Eigenschaften nacheinander zu unerwartetem Verhalten führt, kann der Browser die Änderungen optimieren, was dazu führt, dass Animationen fehlen.
Um dieses Problem zu lösen, ist es wichtig, das Konzept des Reflows zu verstehen. Ein Reflow tritt auf, wenn der Browser das Layout eines Teils des Dokumentbaums neu berechnet, was durch Änderungen an der Größe oder Position von Elementen auf Blockebene ausgelöst wird.
Eine Technik, um einen Reflow zu erzwingen, besteht im Zugriff auf die offsetHeight-Eigenschaft von ein Element, nachdem seine Stile geändert wurden. Dies kann durch die folgende Funktion erreicht werden:
function reflow(elt){ console.log(elt.offsetHeight); }
Durch den Aufruf dieser Funktion nach der Aktualisierung des CSS des Elements kann ein Reflow ausgelöst werden, sodass der Übergang wirksam wird. Hier ist ein modifiziertes Beispiel des Codes aus der Frage, der diese Technik verwendet:
ul.style.transition = 'none 0s linear 0s'; ul.style.left = '-600px'; reflow(ul); ul.style.transition = 'all 0.2s ease-out'; ul.style.left = '0px';
Eine andere Option ist die Verwendung des void()-Operators, der verhindert, dass der Optimierer den Eigenschaftszugriff überspringt:
void(elt.offsetHeight);
Diese Technik ist effektiv, da void ein unärer Operator ist, der den Ausdruck auswertet und dann sein Ergebnis verwirft, um sicherzustellen, dass alle Nebenwirkungen des Zugriffs auf die Eigenschaft ausgeführt werden.
Das obige ist der detaillierte Inhalt vonSo erzwingen Sie den Browser-Reflow für CSS-Übergänge: Ein Leitfaden für effektive Animationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!