will-change
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Die will-change
-Eigenschaft in CSS gibt Browsern einen Hinweis darauf, wie sich ein Element voraussichtlich ändern wird. Browser können möglicherweise Optimierungen vornehmen, bevor ein Element tatsächlich geändert wird. Diese Art von Optimierungen kann die Reaktionsfähigkeit einer Seite erhöhen, indem potenziell aufwendige Arbeiten durchgeführt werden, bevor sie tatsächlich erforderlich sind.
Warning:
will-change
soll nur als letztes Mittel verwendet werden, um bestehende Leistungsprobleme zu bewältigen. Es sollte nicht verwendet werden, um Leistungsprobleme vorwegzunehmen.
Der richtige Gebrauch dieser Eigenschaft kann etwas knifflig sein:
- Wenden Sie will-change nicht auf zu viele Elemente an. Der Browser versucht bereits, alles so gut wie möglich zu optimieren. Einige der stärkeren Optimierungen, die wahrscheinlich mit
will-change
verbunden sind, verbrauchen viele Ressourcen eines Geräts und können bei übermäßigem Einsatz dazu führen, dass die Seite langsamer wird oder viele Ressourcen verbraucht. - Verwenden Sie es sparsam. Das normale Verhalten von Optimierungen, die der Browser vornimmt, besteht darin, die Optimierungen so schnell wie möglich zu entfernen und zum Normalzustand zurückzukehren. Aber das Hinzufügen von
will-change
direkt in einem Stylesheet impliziert, dass die anvisierten Elemente immer kurz davor sind, sich zu ändern, und der Browser wird die Optimierungen viel länger beibehalten, als es sonst der Fall wäre. Es ist also eine gute Praxis,will-change
mittels Skriptcode ein- und auszuschalten, bevor und nachdem die Änderung eintritt. - Wenden Sie will-change nicht an, um vorzeitige Optimierungen durchzuführen. Wenn Ihre Seite gut funktioniert, fügen Sie die
will-change
-Eigenschaft nicht zu Elementen hinzu, nur um ein wenig mehr Geschwindigkeit herauszuholen.will-change
ist als eine Art letzter Ausweg gedacht, um bestehende Leistungsprobleme anzugehen. Es sollte nicht verwendet werden, um Leistungsprobleme vorwegzunehmen. Ein übermäßiger Einsatz vonwill-change
führt zu übermäßigem Speicherverbrauch und sorgt dafür, dass komplexere Renderings durchgeführt werden, während der Browser versucht, sich auf mögliche Änderungen vorzubereiten. Dies führt zu einer schlechteren Leistung. - Geben Sie ihr genügend Zeit, um zu wirken. Diese Eigenschaft ist als Methode gedacht, damit Autoren dem Benutzeragenten im Voraus mitteilen können, welche Eigenschaften sich wahrscheinlich ändern werden. Dann kann der Browser die nötigen vorzeitigen Optimierungen anwenden, bevor die Eigenschaftsänderung tatsächlich erfolgt. Daher ist es wichtig, dem Browser etwas Zeit zu geben, um die Optimierungen tatsächlich durchzuführen. Finden Sie einen Weg, um wenigstens ein wenig im Voraus zu erkennen, dass sich etwas ändern wird und setzen Sie
will-change
dann entsprechend. - Seien Sie sich bewusst, dass will-change das Aussehen von Elementen tatsächlich beeinflussen kann, wenn es mit Eigenschaftswerten verwendet wird, die einen Stacking-Kontext erzeugen (z.B. will-change: opacity), da der Stacking-Kontext im Voraus erstellt wird.
Syntax
/* Keyword values */
will-change: auto;
will-change: scroll-position;
will-change: contents;
will-change: transform; /* Example of <custom-ident> */
will-change: opacity; /* Example of <custom-ident> */
will-change: left, top; /* Example of two <animatable-feature> */
/* Global values */
will-change: inherit;
will-change: initial;
will-change: revert;
will-change: revert-layer;
will-change: unset;
Werte
auto
-
Dieses Schlüsselwort drückt keine besondere Absicht aus; der Benutzeragent sollte die Heuristiken und Optimierungen anwenden, die er normalerweise durchführt.
Das <animatable-feature>
kann einer der folgenden Werte sein:
scroll-position
-
Gibt an, dass der Autor erwartet, die Scrollposition des Elements in naher Zukunft zu animieren oder zu ändern.
contents
-
Gibt an, dass der Autor erwartet, etwas über den Inhalt des Elements in naher Zukunft zu animieren oder zu ändern.
<custom-ident>
-
Gibt an, dass der Autor erwartet, die Eigenschaft mit dem angegebenen Namen auf dem Element in naher Zukunft zu animieren oder zu ändern. Wenn die angegebene Eigenschaft eine Kurzform ist, bedeutet dies die Erwartung für alle Langformen, die die Kurzform expandiert. Es kann nicht einer der folgenden Werte sein:
unset
,initial
,inherit
,will-change
,auto
,scroll-position
odercontents
. Die Spezifikation definiert das Verhalten eines bestimmten Wertes nicht, aber es ist üblich, dasstransform
ein Hinweis auf eine Compositing-Schicht ist. Chrome führt derzeit zwei Aktionen aus, basierend auf bestimmten CSS-Eigenschaftskennungen: eine neue Compositing-Schicht oder einen neuen Stacking-Kontext zu etablieren.
Über Stylesheet
Es kann angebracht sein, will-change
in Ihrem Stylesheet für eine Anwendung zu verwenden, die Seitenumblätterungen bei Tastendrücken wie bei einem Album oder einer Präsentation durchführt, bei denen die Seiten groß und komplex sind. Auf diese Weise kann der Browser die Übergänge im Voraus vorbereiten und flüssige Übergänge zwischen den Seiten ermöglichen, sobald die Taste gedrückt wird. Seien Sie jedoch vorsichtig mit der will-change
-Eigenschaft direkt in Stylesheets. Es kann dazu führen, dass der Browser die Optimierung viel länger im Speicher behält, als sie benötigt wird.
.slide {
will-change: transform;
}
Formale Definition
Initialer Wert | auto |
---|---|
Anwendbar auf | alle Elemente |
Vererbt | Nein |
Berechneter Wert | wie angegeben |
Animationstyp | diskret |
Formale Syntax
will-change =
auto |
<animateable-feature>#
<animateable-feature> =
scroll-position |
contents |
<custom-ident>
Beispiele
Über Skript
Dies ist ein Beispiel, das zeigt, wie die will-change
-Eigenschaft durch Skripting angewendet wird, was in den meisten Fällen die Methode sein sollte, die Sie verwenden.
const el = document.getElementById("element");
// Set will-change when the element is hovered
el.addEventListener("mouseenter", hintBrowser);
el.addEventListener("animationEnd", removeHint);
function hintBrowser() {
// The optimizable properties that are going to change
// in the animation's keyframes block
this.style.willChange = "transform, opacity";
}
function removeHint() {
this.style.willChange = "auto";
}
Spezifikationen
Specification |
---|
CSS Will Change Module Level 1 # will-change |
Browser-Kompatibilität
BCD tables only load in the browser