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

View in English Always switch to English

animation-range

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

Die animation-range CSS Abkürzungseigenschaft wird verwendet, um den Start und das Ende des Anwendungsbereichs einer Animation entlang ihrer Zeitachse festzulegen, d.h. wo entlang der Zeitachse eine Animation beginnen und enden wird.

Zusammengehörige Eigenschaften

Diese Eigenschaft ist eine Kurzform für die folgenden CSS-Eigenschaften:

Syntax

css
/* Range start value only*/
/* Single value syntax */
animation-range: normal;
animation-range: 20%;
animation-range: 100px;
animation-range: cover;
animation-range: contain;
/* Two value syntax */
animation-range: cover 20%;
animation-range: contain 100px;

/* Range start and end values */
/* Two value syntax */
animation-range: normal 25%;
animation-range: 25% normal;
animation-range: 25% 50%;
animation-range: entry exit;
/* Three value syntax */
animation-range: cover cover 200px;
animation-range: 10% exit 90%;
animation-range: entry 10% 90%;
/* Four value syntax */
animation-range: cover 0% cover 200px;
animation-range: entry 10% exit 100%;

/* Global values */
animation-timeline: inherit;
animation-timeline: initial;
animation-timeline: revert;
animation-timeline: revert-layer;
animation-timeline: unset;

Die Abkürzungseigenschaft animation-range wird als eine oder mehrere einzelne Animationsbereiche spezifiziert, getrennt durch Kommas. Jeder Animationsbereich wird als ein bis vier durch Leerzeichen getrennte Werte definiert, die aus <timeline-range-name>-Werten, <length-percentage>-Werten und/oder dem Schlüsselwort normal bestehen.

Werte

<animation-range-start>

Das Schlüsselwort normal, ein <length-percentage>, ein <timeline-range-name>, oder ein <timeline-range-name> <length-percentage>-Paar, das den animation-range-start darstellt. Wenn ein <timeline-range-name> ohne ein <length-percentage> festgelegt wird, lautet der Standardwert für das <length-percentage> 0%.

<animation-range-end>

Das Schlüsselwort normal, ein <length-percentage>, ein <timeline-range-name>, oder ein <timeline-range-name> <length-percentage>-Paar, das den animation-range-end darstellt. Wenn ein <timeline-range-name> ohne ein <length-percentage> festgelegt wird, lautet der Standardwert für das <length-percentage> 100%.

Beschreibung

Die Abkürzungseigenschaft animation-range setzt die Werte animation-range-start und animation-range-end, die festlegen, wo auf der Animationszeitachse die Animation beginnen und enden wird. Standardmäßig werden die in einer Keyframe-Animation definierten Stile nur auf ein Element angewendet, während dieses Element animiert wird. Wann eine Keyframe-Animation auf ein Element angewendet wird, hängt von der Animationszeitachse dieser Animation ab. Standardmäßig werden Animationen nur zwischen dem Start und Ende des Zeitachsendbereichs angewendet. Um die Animation außerhalb dieses Bereichs anzuwenden, setzen Sie den animation-fill-mode auf backwards, forwards oder both. Diese drei animation-fill-mode-Werte wenden die ersten Keyframe-Stile bis zum Startbereich an, die letzten Keyframe-Stile nachdem die Animation endet, oder beides davor und danach.

Der Scrollport-Bereich, der als Sichtbarkeitsbereich für die Fortschrittsansicht bekannt ist, ist der Bereich, innerhalb dessen das Zielelement einer benannten Fortschrittsansicht-Zeitachse-Animation als sichtbar angesehen wird. Standardmäßig ist dies der gesamte Bereich des Scrollports, aber es kann mit der Eigenschaft view-timeline-inset angepasst werden.

Wenn zwei Werte als Komponenten der <animation-range>-Eigenschaft angegeben sind, werden sie in der Reihenfolge <animation-range-start> dann <animation-range-end> interpretiert. Der Wert jeder Komponente ist entweder das Schlüsselwort normal, eine <length-percentage>, oder ein <timeline-range-name>, optional gefolgt von einer <length-percentage>. Diese Werte sind durch Leerzeichen getrennt. Normal entspricht 0% für den Start und 100% für das Ende. Die Einstellung von normal mit einer <length-percentage> für entweder den Start- oder Endbereich ist ungültig.

Definieren des Startbereichs und Standardisieren des Endbereichs

Wenn Sie nur den <animation-range-start> definieren, entweder durch Festlegen einer einzigen <length-percentage>, eines einzelnen <timeline-range-name>, oder des Schlüsselworts normal, oder durch Angabe eines einzelnen <timeline-range-name> gefolgt von einer einzigen <length-percentage>, folgt der berechnete Wert des <animation-range-end> bestimmten Regeln:

Wenn der Wert eine einzelne <length-percentage> oder das Schlüsselwort normal ist, definiert dieser Wert den <animation-range-start> und der <animation-range-end> wird implizit auf normal gesetzt. Beispiel:

  • animation-range: 20%; ist gleichbedeutend mit animation-range-start: 20%; animation-range-end: normal;
  • animation-range: normal; ist gleichbedeutend mit animation-range-start: 0%; animation-range-end: 100%;

Wenn der Wert ein einzelner <timeline-range-name> (ohne eine folgende <length-percentage>) ist, wird dieser Zeitachsenbereichsname sowohl auf die <animation-range-start>- als auch die <animation-range-end>-Komponenten angewendet, und die Bereiche von 0% bzw. 100% werden impliziert. Beispiel:

  • animation-range: contain; ist gleichbedeutend mit animation-range-start: contain 0%; animation-range-end: contain 100%;
  • animation-range: cover; ist gleichbedeutend mit animation-range-start: cover 0%; animation-range-end: cover 100%;

Wenn der Wert ein einziger <timeline-range-name> mit einer folgenden <length-percentage> in dieser Reihenfolge ist, definiert das Paar den <animation-range-start> und der definierte <timeline-range-name> wird bei 100% auf den <animation-range-end> angewendet. Beispiel:

  • animation-range: cover 20%; ist gleichbedeutend mit animation-range-start: cover 20%; animation-range-end: cover 100%;
  • animation-range: contain 100px; ist gleichbedeutend mit animation-range-start: contain 100px; animation-range-end: contain 100%;

Explizite Definition sowohl des Start- als auch des Endbereichs mit zwei Werten

Wenn zwei oder mehr Werte in Ihrer animation-range-Deklaration enthalten sind und die Werte irgendetwas anderes als ein einzelner <timeline-range-name> gefolgt von einer <length-percentage> sind, werden sowohl <animation-range-start> als auch <animation-range-end> explizit gesetzt.

Wenn Sie zwei Werte angeben und der erste Wert das Schlüsselwort normal oder eine <length-percentage> ist, definiert dieser Wert den <animation-range-start>, und der zweite Wert definiert den <animation-range-end>. Beispiel:

  • animation-range: normal 25%; ist gleichbedeutend mit animation-range-start: 0%; animation-range-end: 25%;
  • animation-range: 25% 50%; ist gleichbedeutend mit animation-range-start: 25%; animation-range-end: 50%;
  • animation-range: 25% contain; ist gleichbedeutend mit animation-range-start: 25%; animation-range-end: contain 100%;
  • animation-range: 25% normal; ist gleichbedeutend mit animation-range-start: 25%; animation-range-end: 100%;

Mehrere Animationen

Bei der Angabe von Bereichen für mehrere Animationen wird die Abkürzungseigenschaft animation-range als eine oder mehrere einzelne Animationsbereiche angegeben, getrennt durch Kommas. Jeder Animationsbereich wird in der Reihenfolge auf die Animationen angewendet, in der die animation-names erscheinen. In Situationen, in denen die Anzahl der Animationen und die Werte der animation-range-Eigenschaft nicht übereinstimmen, werden, wenn es mehr animation-range-Werte als Animationen gibt, die zusätzlichen Bereiche ignoriert. Wenn es mehr Animationen als Bereiche gibt, wird die Liste der animation-range-Werte wiederholt, bis ein entsprechender Bereich für jede Animation vorhanden ist. Beispiel: Wenn wir animation-range: 25% 75%, normal; setzen, gilt der Animationsbereich aller ungeraden Animationen 25% 75% und aller geraden Animationen 0% 100%.

Formale Definition

Anfangswertwie die jeweiligen Kurzschreibweisen:
Anwendbar aufalle Elemente
VererbtNein
ProzentwerteRelative to the specified named timeline range if specified, otherwise relative to the entire timeline
Berechneter Wertwie die jeweiligen Kurzschreibweisen:
  • animation-range-start: A list where each item may be 'normal', a length percentage, or a timeline range name and a length percentage
  • animation-range-end: A list where each item may be 'normal', a length percentage, or a timeline range name and a length percentage
Animationstypwie die jeweiligen Kurzschreibweisen:

Formale Syntax

animation-range = 
[ <'animation-range-start'> <'animation-range-end'>? ]#

<animation-range-start> =
[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#

<animation-range-end> =
[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#

<length-percentage> =
<length> |
<percentage>

Beispiele

Grundlegende Verwendung der animation-range-Eigenschaft

In diesem Beispiel verkürzen wir die Dauer der Scroll-Animationsansicht, indem wir die animation-range-Eigenschaft verwenden, um den Start und das Ende der Animation zu verschieben, und demonstrieren die Auswirkung der animation-fill-mode-Eigenschaft auf verkürzte Zeitachsen der Animation.

HTML

In der Mitte einer Textwand platzieren wir ein Element, das wir animieren werden. Wir fügen viel Text hinzu, um sicherzustellen, dass unser Inhalt seinen Container überläuft, aber dies wird der Kürze halber verborgen. Wir fügen auch ein Kontrollkästchen hinzu, um die animation-fill-mode-Eigenschaft ein- und auszuschalten, um deren Auswirkungen auf verkürzte Animationszeitleisten zu demonstrieren. Auch dies wird verborgen.

html
<div class="animatedElement"></div>

CSS

Wir definieren eine Animation, die die Deckkraft, die Skalierung und die Hintergrundfarbe eines Elements animiert, sodass es einblendet, vergrößert und die Farbe ändert, während die Animation fortschreitet. Wir wenden diese Animation auf das animatedElement mit der animation-Abkürzung an.

Eine Fortschritts-Zeitachse der Ansicht wird erstellt, indem die view()-Funktion als Wert der animation-timeline-Eigenschaft auf unserem animatedElement gesetzt wird. Das Ergebnis ist, dass das Element animiert wird, während es nach oben durch das Dokument bewegt wird, wenn es gescrollt wird. Wir deklarieren die animation-timeline-Eigenschaft nach der Abkürzung, da die Abkürzung diese Eigenschaft zurücksetzt.

Zuletzt wird eine animation-range-Deklaration gesetzt, um die Animation später als erwartet beginnen zu lassen und früher zu beenden.

css
.animatedElement {
  background-color: deeppink;
  animation: appear 1ms linear;
  animation-timeline: view();
  animation-range: entry 10% exit -25%;
}

@keyframes appear {
  from {
    background-color: rebeccapurple;
    opacity: 0;
    transform: scaleX(0);
  }

  to {
    background-color: darkturquoise;
    opacity: 0.75;
    transform: scaleX(0.75);
  }
}

Wir fügen auch bedingte Styles hinzu: Wenn das Kontrollkästchen aktiviert ist, wird die animation-fill-mode-Eigenschaft auf das animierte Element angewendet:

css
:has(:checked) .animatedElement {
  animation-fill-mode: both;
}

Die anderen Styles werden der Kürze halber ausgeblendet.

Ergebnis

Scrollen Sie, um das sich animierende Element zu sehen.

Beachten Sie, wie die from- oder 0%-Keyframe-Eigenschaften nicht auf das animierte Element angewendet werden, bis die obere Blockrahmenkante 10% über die untere Kante des Containers hinaus ist; es hat volle Größe, volle Deckkraft und ist magenta. An diesem Punkt wird die Animation angewendet und sie wird mit den Werten gestylt, die mit dem 0% Keyframe-Selektor definiert sind. Wenn das animation-range-end erreicht ist, 25% vom oberen Rand des Scrollports, springt es zurück zu seinem ursprünglichen Stil.

Im Allgemeinen werden Sie animation-fill-mode: both setzen wollen, wenn Sie scrollgetriebene Animationen erstellen. Der Sprung zum Standardzustand tritt auf, weil wir die animation-fill-mode-Eigenschaft nicht auf das Element gesetzt haben, die verwendet werden kann, um die Stile einer Animation auf ein Element vor und nach der Ausführung der Animation anzuwenden. In diesem Beispiel haben wir die Eigenschaft zunächst weggelassen, um die Auswirkungen von animation-range besser zu veranschaulichen.

Aktivieren Sie das Kontrollkästchen, um die animation-fill-mode-Eigenschaft auf das animierte Element anzuwenden und scrollen Sie dann erneut: Die Animationsstile sollten nun kontinuierlich angewendet werden.

Spezifikationen

Spezifikation
Scroll-driven Animations
# animation-range

Browser-Kompatibilität

Siehe auch