Kurzfassung
Ab Chrome 53 werden alle Inhalte neu gerastert, wenn sich die Transformationsskala ändert, sofern die CSS-Property will-change: transform
nicht vorhanden ist. Mit anderen Worten: will-change: transform
bedeutet „animieren Sie es bitte schnell“.
Dies gilt nur für Skalierungen von Transformationen, die über Script-Manipulation erfolgen, und nicht für CSS-Animationen oder Web-Animationen.
Das bedeutet, dass die Inhalte Ihrer Website wahrscheinlich ansprechender aussehen, aber ohne einige der unten beschriebenen einfachen Änderungen auch langsamer sein können.
Auswirkungen auf Webentwickler
Durch diese Änderung wird mit will-change: transform
erzwungen, dass der Inhalt in eine feste Bitmap gerastert wird, die sich bei Transformationsaktualisierungen nicht mehr ändert. So können Entwickler die Geschwindigkeit von Transformationsanimationen für diese Bitmap erhöhen, z. B. durch Verschieben, Drehen oder Skalieren.
Wir unterscheiden nicht zwischen Skalierungs- und Verschiebungstransformationen.
Empfohlene Maßnahmen
Verwenden Sie will-change: transform
für Elemente, wenn Sie eine sehr schnelle Transformationsanimation (60 fps) benötigen und das Rastern des Elements in hoher Qualität in jedem Frame nicht schnell genug ist. Andernfalls sollten Sie will-change: transform
vermeiden.
Um den Kompromiss zwischen Leistung und Qualität zu optimieren, sollten Sie will-change:
transform
am Anfang von Animationen hinzufügen und am Ende entfernen. Beachten Sie jedoch, dass das Hinzufügen oder Entfernen von will-change: transform
oft hohe einmalige Leistungskosten verursacht.
Weitere Implementierungsüberlegungen
Wenn du will-change: transform
entfernst, werden die Inhalte in einer scharfen Skalierung neu gerastert, aber nur im nächsten Animationsframe (über requestAnimationFrame)
). Wenn Sie also eine Ebene mit will-change: transform
haben und einfach ein erneutes Rastern auslösen, aber dann mit der Animation fortfahren möchten, müssen Sie „will-change: transform“ entfernen und dann in einem requestAnimationFrame() c
allback wieder hinzufügen.
Wenn Sie während einer Animation jederzeit mit dem aktuellen Maßstab rastern möchten, entfernen Sie will-change:
transform
in einem Frame und fügen Sie ihn in einem nachfolgenden Frame wieder hinzu.
Dies kann dazu führen, dass die zusammengesetzte Ebene der Inhalte verloren geht, was die oben genannte Empfehlung etwas kostspielig macht. Wenn das ein Problem darstellt, empfehlen wir, den Inhalten ebenfalls transform: translateZ(0)
hinzuzufügen, damit sie während dieses Vorgangs in einer zusammengesetzten Ebene bleiben.
Zusammenfassung der Auswirkungen
Diese Änderung hat Auswirkungen auf die Qualität, Leistung und Entwicklersteuerung der gerenderten Inhalte.
- Qualität der gerenderten Inhalte: Die gerenderte Ausgabe von Elementen, die die Transformierungsskala animieren, ist standardmäßig immer scharf.
- Leistung: Die Transformation wird bei vorhandener
will-change: transform
schnell animiert. - Entwicklersteuerung: Entwickler können zwischen Qualität und Geschwindigkeit wählen, und zwar pro Element und pro Animationsframe, indem sie
will-change: transform
hinzufügen oder entfernen.
Weitere Informationen finden Sie im oben verlinkten Designdokument.
Beispiele
In diesem Beispiel bleibt das Element mit der ID remainsBlurry
nach dieser Änderung unscharf, das Element mit der ID noLongerBlurry
wird jedoch scharf. Das liegt daran, dass das erste eine CSS-Eigenschaft vom Typ will-
change: transform
enthält.
Beispiele für Skalierungsanimationen aus der Praxis
- Aus diesem Fehler: Zoomender Tiger
- Google Maps auf einem Mobilgerät (maps.google.com): Karte heranzoomen
- Google Maps Lite auf dem Computer
- Ticketmaster-Sitzplan