Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 ⁨Januar 2020⁩.

Die will-change CSS Eigenschaft gibt Browsern einen Hinweis darauf, wie sich ein Element voraussichtlich ändern wird. Browser können Optimierungen vorbereiten, bevor ein Element tatsächlich geändert wird. Diese Art von Optimierungen kann die Reaktionsgeschwindigkeit einer Seite erhöhen, indem potenziell teure Arbeiten durchgeführt werden, bevor sie tatsächlich erforderlich sind.

Warnung: will-change sollte als letztes Mittel verwendet werden, um mit bestehenden Leistungsproblemen umzugehen. Es sollte nicht verwendet werden, um Leistungsprobleme vorherzusehen.

Die richtige Verwendung dieser Eigenschaft kann etwas knifflig sein:

  • Wenden Sie will-change nicht auf zu viele Elemente an. Der Browser versucht bereits, alles so weit wie möglich zu optimieren. Einige der stärkeren Optimierungen, die wahrscheinlich mit will-change verbunden sind, verbrauchen viele Ressourcen eines Computers und können bei zu häufiger Anwendung dazu führen, dass die Seite langsamer wird oder viele Ressourcen verbraucht.
  • Verwenden Sie es sparsam. Das normale Verhalten der vom Browser vorgenommenen Optimierungen besteht darin, die Optimierungen so schnell wie möglich zu entfernen und zum normalen Zustand zurückzukehren. Aber das Hinzufügen von will-change direkt in einem Stylesheet impliziert, dass die anvisierten Elemente immer kurz davor stehen, sich zu ändern, und der Browser wird die Optimierungen viel länger beibehalten, als er es sonst tun würde. Deshalb ist es eine gute Praxis, will-change mithilfe von Skript-Code vor und nach der Änderung ein- und auszuschalten.
  • Verwenden Sie will-change nicht, um vorzeitige Optimierungen durchzuführen. Wenn Ihre Seite gut funktioniert, fügen Sie den Elementen nicht die will-change-Eigenschaft hinzu, nur um ein wenig mehr Geschwindigkeit herauszuholen. will-change sollte als eine Art letztes Mittel verwendet werden, um bestehende Leistungsprobleme zu lösen. Es sollte nicht verwendet werden, um Leistungsprobleme vorherzusehen. Übermäßiger Gebrauch von will-change führt zu übermäßigem Speicherverbrauch und kann dazu führen, dass eine komplexere Darstellung ausgeführt wird, da der Browser versucht, sich auf die mögliche Änderung vorzubereiten. Dies wird zu schlechterer Leistung führen.
  • Geben Sie ihm genügend Zeit, um zu arbeiten. Diese Eigenschaft ist als Methode für Autoren vorgesehen, um dem User-Agent mitzuteilen, welche Eigenschaften sich voraussichtlich im Voraus ändern werden. Dann kann der Browser wählen, ob erforderliche Optimierungen für die Eigenschaftsänderung im Voraus angewendet werden, bevor die Eigenschaftsänderung tatsächlich stattfindet. Es ist also wichtig, dem Browser etwas Zeit zu geben, um die Optimierungen tatsächlich durchzuführen. Finden Sie einen Weg, um zumindest leicht vorherzusagen, dass sich etwas ändern wird, und setzen Sie will-change dann.
  • Seien Sie sich bewusst, dass will-change das visuelle Erscheinungsbild von Elementen tatsächlich beeinflussen kann, wenn es mit Eigenschaftswerten verwendet wird, die einen Stacking context erstellen (z.B. will-change: opacity), da der Stacking-Kontext vorab erstellt wird.

Syntax

css
/* 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 ihm normalerweise eigenen Heuristiken und Optimierungen anwenden.

Das <animatable-feature> kann einer der folgenden Werte sein:

scroll-position

Gibt an, dass der Autor erwartet, die Scroll-Position 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 am Element in naher Zukunft zu animieren oder zu ändern. Wenn die angegebene Eigenschaft ein Shorthand ist, bedeutet dies die Erwartung für alle Longhands, auf die das Shorthand expandiert. Es kann keiner der folgenden Werte sein: unset, initial, inherit, will-change, auto, scroll-position, oder contents. Die Spezifikation definiert das Verhalten für bestimmte Werte nicht, aber es ist üblich, dass transform ein Hinweis auf eine Compositing-Schicht ist. Chrome unternimmt derzeit zwei Aktionen, gegeben bestimmte CSS-Eigenschafts-Identifikatoren: eine neue Compositing-Schicht oder einen neuen Stacking context erstellen.

Über Stylesheet

Es kann angemessen sein, will-change in Ihrem Stylesheet für eine Anwendung einzuschließen, die Seitenwechsel bei Tastendrücken wie ein Album oder eine Präsentation mit Folien enthält, wo die Seiten groß und komplex sind. Dies lässt den Browser die Übergänge im Voraus vorbereiten und ermöglicht schnelle Übergänge zwischen den Seiten, sobald die Taste gedrückt wird. Aber seien Sie vorsichtig mit der Eigenschaft will-change direkt in Stylesheets. Es kann dazu führen, dass der Browser die Optimierung viel länger im Speicher behält, als es erforderlich ist.

css
.slide {
  will-change: transform;
}

Formale Definition

Anfangswertauto
Anwendbar aufalle Elemente
VererbtNein
Berechneter Wertwie angegeben
Animationstypdiskret

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 wahrscheinlich das ist, was Sie in den meisten Fällen tun sollten.

js
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

Siehe auch