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

View in English Always switch to English

Verständnis der Timeline-Inset-Werte

Standardmäßig verfolgen View Progress Timelines Elemente über den gesamten Animationsanheftungsbereich. Der Fortschrittspunkt 0% liegt am Anfang des Bereichs, während der Punkt 100% am Ende liegt. Der Anheftungsbereich der Animation kann durch Festlegen eines Timeline Range Names geändert werden, und die Position der Fortschrittspunkte 0% und 100% entlang des Bereichs kann durch Festlegen von Längen- oder Prozent-Inset-Werten angepasst werden.

Dieser Leitfaden erklärt, wie Sie die Animations-Timeline auf einen bestimmten Teil des Animationszeitbereichs mit Längen- oder Prozent-Inset-Werten begrenzen können.

Animations-Timelines: eine Einführung

CSS-Animationen werden durch die Definition benannter @keyframes-Animationen erstellt, die das Verhalten einer Animation spezifizieren, und dann die Keyframe-Animation mithilfe des Namens der Animation an ein Element anheften.

Die Animations-Timeline des Elements, definiert durch die Eigenschaft animation-timeline, bestimmt, wie und wann das Element durch diese Keyframes fortschreitet. Standardmäßig ist die Timeline zeitbasiert und verwendet die standardmäßige zeitraumbasierte DocumentTimeline des Dokuments.

Das Modul CSS scroll-gesteuerte Animationen definiert Scroll-Fortschritts- und View-Fortschritt-Timelines, die Methoden sind, um Eigenschaftswerte entlang einer scrollbasierten Timeline anstelle der standardmäßigen zeitraumbasierten Dokument-Timeline zu animieren. In diesem Artikel werden wir nur View Progress Timelines besprechen, da Scroll Progress Timelines für Timeline-Inset-Werte nicht relevant sind.

View Progress Timelines

Bei View Progress Timelines wird die Timeline oder der Fortschritt der Animation durch die Sichtbarkeit des Elements anstelle des Zeitablaufs gesteuert, wobei der Keyframe-Fortschritt an die Position und Sichtbarkeit des Elementes innerhalb des Scroll-Containers gebunden ist. Die Animation läuft vorwärts oder rückwärts, während das Element durch den Scrollport fortschreitet oder umgekehrt. Die Animation erfolgt nur, wenn zumindest ein Teil des Elements innerhalb seines Scrollports sichtbar ist, und pausiert, wenn das Scrollen stoppt.

css
.animated_element {
  animation-name: nameOfAnimation;
  animation-timeline: view();
}

Das Setzen eines animation-name wendet die Animation auf das ausgewählte Element an.

Hinweis: Die Eigenschaft animation-timeline sollte immer nach allen animation-Kurzschreibnotationen kommen. Auch wenn die Kurzschreibweise nicht verwendet werden kann, um die Eigenschaft animation-timeline zu setzen, setzt sie die Timeline trotzdem auf die standardmäßige zeitraumbasierte Dokument-Timeline zurück.

Hinweis: In allen Beispielen ist der Scroll-Container 250px hoch und wir verwenden die Standardwerte für animation-iteration-count (1), animation-delay (0s) und animation-direction (normal). Wir setzen die animation-timing-function auf step-end und animation-fill-mode auf forward, um es deutlicher zu machen, wann die Animationsiteration noch nicht begonnen hat, wann sie aktiv ist und wann sie abgeschlossen ist. Lesen Sie den Verwendung von CSS-Animationen-Leitfaden, um mehr zu erfahren.

Wenn Sie nach oben scrollen, schreitet die Animation voran. Wenn Sie nach unten scrollen, geht die Animation rückwärts.

In diesem Beispiel tritt die Animation auf, wann immer ein Teil des betreffenden Elements im Scrollport sichtbar ist. Standardmäßig beginnen View Progress Animations gerade dann, wenn die obere Kante des betreffenden Elements sich mit der unteren Kante des Scroll-Containers ausrichtet und enden, indem sie 100% Fortschritt erreichen, wenn die Endkante sich mit der Startkante des Containers ausrichtet, unabhängig von der Größe des betreffenden Elements. Standardmäßig wird die Animation angewendet, wenn ein Teil des Betreffs innerhalb des Scrollports sichtbar ist.

Anheftungsbereiche der Animation

In einem View Progress Timeline, wenn keine Animationsbereichs-eigenschaften definiert sind, ist das <timeline-range-name> normal, was standardmäßig cover ist. Die Animation wird immer dann angewendet, wenn irgendein Teil des betreffenden Elements sichtbar ist, was bedeutet, dass der standardmäßige Animationsanheftungsbereich die Summe der Höhe des Scroll-Containers und der Höhe des betreffenden Elements ist, wobei diese zusätzliche Höhe am Scroll-Ende Rand liegt. In unserem Beispiel, da der Scroll-Container 250px hoch ist und der Betreff 50px, 250px oder 500px hoch ist, beträgt der vertikale Anheftungsbereich der Animation 300px, 500px oder 750px bzw.

Der Fortschritt bei 0% tritt auf, wenn die Startkante des betreffenden Elements den Scrollport am Endrand schneidet und 100% Fortschritt erreicht, wenn die Endkante des Betreffs den Scrollport durch die Startkante verlässt. Dies sind die oberen und unteren Kanten des Betreffs und des Scrollports beim vertikalen Scrolling, und die linken und rechten oder rechten und linken Kanten beim horizontalen Scrolling, abhängig vom Schreibmodus.

Das folgende Diagramm zeigt die Position des Betreffs bei den 0%- und 100%-Fortschrittspunkten für die drei Subjektgrößen:

Die gelben Elemente repräsentieren die Position des Elements, wenn der from-Keyframe angewendet wird, also die 0%-Fortschrittsmarkierung des Animationsbereichs. Das Rot repräsentiert die Position des animierten Elements relativ zum Scrollport, wenn der to-Keyframe angewendet wird, was das Ende der Animation darstellt, oder die 100%-Fortschrittsmarkierung. Das Grau repräsentiert den Scrollport.

Standardmäßig animiert sich das Element, während es "in view" ist, aber diese standardmäßige Definition von "in view" passt möglicherweise nicht zu Ihren Anforderungen. Glücklicherweise können wir steuern, welche Kanten die Ränder des Animationsanheftungsbereichs definieren und dann den Start und das Ende dieses Bereichs mit den Animationsbereichs-eigenschaften versetzen.

Animationsbereichs-Eigenschaften

Die animation-range-Eigenschaften ermöglichen es, einen benannten Timeline-Bereich wie contain oder exit-crossing zu spezifizieren, der den verwendeten Bereich vom standardmäßigen cover-Bereich ändert. Sie können auch einen <length-percentage>-Wert einbeziehen, der den Anheftungsbereich vom Start des Bereichs einfügen. Prozentsätze beziehen sich auf den benannten oder standardmäßigen Timeline-Bereich.

Benannte Timeline-Bereiche definieren die Teile eines ViewTimeline, die den Bereich einer Animation definieren, indem sie den Start und das Ende des Anheftungsbereichs der Animation spezifizieren.

Die Eigenschaft animation-range ist eine Kurzschreibweise, die die Eigenschaften animation-range-start und animation-range-end definiert. animation-range-start definiert die Position des betreffenden Elements, wenn die Animation beginnt. animation-range-end definiert die Position des betreffenden Elements, wenn die Animation endet.

Lesen Sie den Leitfaden zu den Namen der Timeline-Bereiche, um mehr über die verschiedenen benannten Timeline-Bereiche zu erfahren. Dieser Leitfaden konzentriert sich darauf, wie die <length-percentage>-Inset-Werte funktionieren.

Setzen von Inset-Werten mit Längen

Die Eigenschaften animation-range-start und animation-range-end akzeptieren jeweils einen benannten Animationsbereich, einen <length-percentage>-Offset-Wert oder beides. Jeder Längen- oder Prozentsatzversatz wird vom Start des Anheftungsbereichs der Animation aus gemessen.

Wenn eine Länge festgelegt ist, ist der Versatz ziemlich intuitiv. Wir verwenden hier die Eigenschaften animation-range-start und animation-range-end, um die Animations-Timeline einzufügen. Dies definiert ein Unterabschnitt des gesamten Anheftungsbereichs der Animation des Elements als aktives Intervall, wobei die <length>-Werte Abstände vom Start des standardmäßigen normalen Anheftungsbereichs der Animation angeben.

css
.animated_element {
  animation-range-start: 1em;
  animation-range-end: 125px;
}

Der Start und das Ende des Animationsbereichs sind 1em bzw. 125px vom Start des Anheftungsbereichs der Animation entfernt. Da der Standard-Timeline-Bereich normal ist, der sich als cover auflöst, ist der Startpunkt des Anheftungsbereichs der Animation der Block-Endrand des Containers.

Wir haben Linien 1em und 125px vom Block-Endrand des Scroll-Containers hinzugefügt. Die Animation beginnt, wenn die Block-Startkante des betreffenden Elements die 1em-Linie erreicht und endet, wenn sie die 125px-Linie erreicht.

In diesem Fall, da der Anheftungsbereich der Animation sowohl für den Start- als auch für den End-Offsetwert zu cover aufgelöst wird, ist die Position der Inset-Werte ziemlich einfach.

Auswirkungen benannter Bereiche auf Längen-Offsets

Der Offset-Abstand ist immer vom Start des zugehörigen Animationsbereichs. In diesem Beispiel setzen wir animation-range-start auf 50px vom Start des standardmäßigen normalen Bereichs und setzen animation-range-end auf 100px vom Start des explizit gesetzten entry-Bereichs:

css
.animated_element {
  animation-range-start: 50px;
  animation-range-end: entry 100px;
}

Da der Startpunkt sowohl des normalen als auch des entry-Bereichs die Endkante des Containers ist, beginnt die Animation, wenn die Startkante des Subjekts 50px vom unteren Rand des Scrollports entfernt ist, und endet mit 100% Fortschritt, wenn die Startkante des Subjekts 100px vom unteren Rand des Scrollports entfernt ist, unabhängig von der Größe des Subjekts. Während die Größe des entry-Bereichs für die drei verschiedenen Subjektgrößen unterschiedlich ist, spielt in diesem Fall die Größe des zugrunde liegenden Bereichs keine Rolle.

Längen-Offsets mit unterschiedlichen Bereichen

Die Größe des Bereichs ist wichtig, wenn der Bereich nicht an der Endkante des Elements beginnt, wie es bei exit und exit-crossing der Fall ist, oder wenn der Offset ein Prozentwert ist. Diese Tatsache und die Tatsache, dass Sie Anwendungsbereichs-Namen mischen und anpassen können, machen View Progress Timeline-Offsets etwas komplexer zu verstehen als nicht versetzte Timeline-Bereichs-Namen.

Zum Beispiel, wenn Sie exit als den Timeline-Bereichsnamen setzen, ist die Größe des Subjekts wichtig, da sie den Ort der Endkante des Bereichs bestimmt.

css
.animated_element {
  animation-range-start: entry 60px;
  animation-range-end: exit 75px;
}

Sowohl bei entry als auch bei exit ist der Bereich die Größe des Subjekts, wobei die Größe auf die Größe des Scrollports beschränkt ist. Das bedeutet, dass die Höhe der entry- und exit-Bereiche die Höhe der Box in den 50px- und 250px-Beispielen ist, während im 500px-Beispiel der Bereich auf die Höhe des Scrollports beschränkt ist, der 250px hoch ist.

Wir haben ein paar Linien hinzugefügt, um die folgenden Erklärungen zu erleichtern: Die untere blaue Linie ist 60px von der Endkante des Scrollports entfernt, und die obere rote Linie ist 75px von derselben Kante entfernt. Hier beginnen bzw. enden die Animationsbereiche.

Dieses Beispiel zeigt mehrere wichtige Merkmale, die wir ausführlicher erläutern werden, darunter:

Vom Startpunkt des Bereichs gemessen

Da die Offset-Position immer relativ zum Start des Animation Range-Namens ist, tritt der Beginn der Animation für alle drei Elemente auf, wenn die Stielkante der Elemente den Punkt schneidet, der 60px vom Start des entry-Bereichs entfernt ist.

Der animation-range-end Wert definiert die Position, an der die Animation endet. Der Wert exit 75px bedeutet im Wesentlichen "wenn 75px des Subjekts den Startpunkt des Scrollports verlassen haben." Dies variiert für jedes Subjekt. Für das 50px-Subjekt tritt dies erst auf, nachdem es 25px außerhalb des Scrollports ist; wenn das Element nicht sichtbar ist. Das Animationsbereichsende für sowohl das 250px- als auch das 500px-Subjekt tritt auf, wenn ihre untere Endkante die blaue Linie auf 75px vom Ende des Scrollports schneidet. Warum sind ihre End-Offsets gleich? Wegen der Beschränkung! Die maximale Größe des benannten Animationsbereichs ist auf die Größe des Scrollports beschränkt. Der exit Bereich ist bei beiden Subjekten gleich, daher sind die Bereichsenden-Offsets gleich.

Über die Kanten des Scrollports hinaus

Für unser 50px hohes Subjekt ist der exit Bereich 50px hoch, der an die Startkante des Scrollports angrenzt. Das Setzen von animation-range-end: exit 75px für jedes Element, das kleiner als 75px ist, bedeutet, dass das Ende des Bereichs außerhalb des Scrollports liegt, da der Punkt 75px vom Start des exit Bereichs über die Startkante des Scrollports hinaus liegt. In unserem Beispiel endet der Animationsbereich des 50px Subjekts, wenn die Startkante des Subjekts 75px über die Startkante des Scrollports hinaus ist. Die Animation endet, indem sie den to-Keyframe und das animationend-Ereignis erreicht, nur wenn (und wenn) das Element 25px aus dem Blickfeld gescrollt wird.

Die Animation endet auch dann, wenn das Ende des Animationsbereichs außerhalb des Scrollports liegt, solange Platz vorhanden ist, um zu diesem Punkt zu scrollen. Hätten wir animation-range-end: exit 250px festgelegt, hätte die Animation geendet, wenn die Endkante der mittleren und großen Subjekte den Scrollport an der Startkante des Containers verlassen hätte.

Mit dem Ende gesetzt auf exit 250px, könnte die Animation des kleinen Subjekts möglicherweise nicht enden, da möglicherweise nicht 450px Inhalt nach dem Subjekt vorhanden sind, zu dem die Benutzer scrollen können, bevor der Endpunkt erreicht wird.

Auswirkungen der Beschränkung

Mit unserem 250px hohen Container, wenn das Subjekt 250px oder 500px hoch ist, ist der exit Bereich die Größe des Containers, wobei der Start die Endkante des Scroll-Containers ist. Mit einem 75px Offset tritt das Ende der Animation auf, wenn die Endkante des Subjekts 75px von der Endkante des Scroll-Containers entfernt ist (gekennzeichnet durch die obere rote Linie).

Da die Offset-Position immer relativ zum Start des benannten oder Standard-Animationsbereichs ist, beeinflusst die Beschränkung in unserem Beispiel das große Subjekt animation-range-end. Wir setzen das Ende des Bereichs auf exit 75px, was 75px vom Start des exit Bereichs ist. Wenn das Subjekt die gleiche Größe wie der Scrollport (unser 250px Subjekt) oder größer (unser 500px Subjekt) hat, ist das Animationsbereichsende 75px vom Endrand des Scrollports entfernt, was 75px vom Start des Scrollports beschränkten exit Bereichs ist.

Negative Längen

Bis zu diesem Punkt waren alle Offsets größer als null. Es ist wichtig zu beachten, dass negative Längen gültig sind. Ein negativer Offset auf dem animation-range-start macht den Bereich länger, während ein negativer Offset auf dem animation-range-end den Bereich kürzer macht.

Vergleichen wir die negativen Insets mit den 0-Werten:

css
#A {
  animation-range-start: contain -25px;
  animation-range-end: exit -25px;
}
#B {
  animation-range-start: contain 0;
  animation-range-end: exit 0;
}

Der erste Animationsbereich ist um 25px in Richtung des Endrandes des Containers verschoben.

Setzen von Inset-Werten mit Prozentsätzen

Wie Längenwerte definieren Prozentsätze Offsets vom Start des Anheftungsbereichs der Animation. Die Prozent-Offsets beziehen sich auf die Dimension des Timeline-Bereichs, nicht auf den Scrollport. Aus diesem Grund sind Prozentsätze nicht so intuitiv wie Längenwerte für die meisten Menschen (obwohl Längenwerte nicht besonders intuitiv waren).

Hier verwenden wir animation-range-start und animation-range-end, um die Animations-Timeline zu verschieben. Während wir die gleichen Eigenschaften verwenden, setzen wir <percentage>-Werte anstelle von <length>-Werten:

css
.animated_element {
  animation-range-start: 20%;
  animation-range-end: 60%;
}

Dies definiert das aktive Intervall, um 20% in den Standard-Anheftungsbereich und 60% durch denselben Bereich. Der Standard-normal-Animationsanheftungsbereich, der sich als cover verhält, ist die Höhe des Scroll-Containers plus die Höhe des betreffenden Elements, was bedeutet, dass der Bereich je nach ausgewähltem Optionsfeld unterschiedlich ist.

Zu Illustrationszwecken gibt es zwei dunkle Linien, die den Container an den 20%- und 60%-Punkten des vollen Animationsbereichs überqueren. Die Animation beginnt, wenn die Block-Startkante den 20%-Punkt erreicht, das heißt die untere grüne Linie. Die Animation endet, wenn die Startblockkante 60% des Weges durch den normalen Bereich ist, was die obere rote Linie ist.

Nur wenn das Element 50px hoch ist, ist die Oberkante des Subjekts noch im Scrollport, wenn das Ende der Animation erreicht ist; es gibt keine oberen roten Linien, wenn 250px oder 500px ausgewählt sind, da das Ende des Animationsbereichs außerhalb des Scrollports liegt.

Basierend auf der Höhe unserer Subjekte ist die 20%-Markierung entweder 60px, 100px oder 150px vom Endrand des Scrollports entfernt (markiert durch die grüne Linie, die immer im Scrollport ist), und die 60%-Markierung ist 180px, 300px oder 450px von demselben Punkt entfernt (markiert mit einer roten Linie, aber nur für das 50px-Subjekt sichtbar).

Zu Illustrationszwecken gibt es zwei hellgraue Linien, die den Container 20% und 60% des Weges durch den Scrollport überqueren, die 50px und 150px vom unteren Rand des Scrollports entfernt sind. Da sich die animation-range-*-Prozentsätze auf den Timeline-Bereich beziehen, nicht auf den Scrollport, zeigen diese Linien nur, wie die Prozentsätze nicht übereinstimmen. Wir haben auch zwei horizontale hellgraue Linien hinzugefügt, die bei ihren eigenen 20% und 60%-Punkten durch jedes Subjekt gehen. Diese Linien stimmen mit den hellgrauen Linien des Scrollports überein, wenn jede Subjekt-Animation beginnt und endet.

Das folgende Bild zeigt, wo sich die betreffenden Elemente befinden, wenn die Animation beginnt (der 0%-Keyframe) und endet (der 100%-Keyframe). Dieses Bild enthält die Insets aus der Animations-Timeline im vorherigen Beispiel und die Timeline ohne Insets zum Vergleich.

Wie zuvor repräsentiert das Gelbe die Position des Elements, wenn die from-Keyframe angewendet wird, das Rote repräsentiert die Position, wenn die to-Keyframe angewendet wird, und das Grau repräsentiert den Scrollport. Die gestreiften Bereiche sind dort, wo sich die roten und gelben Elementdarstellungen überlappen. Zu Illustrationszwecken haben wir schwarze horizontale Linien mit gestrichelten Linien hinzugefügt, die 20% und 60% des Weges durch den Scrollport verlaufen, beginnend von unten.

Die Animation beginnt erst, wenn das Element die 20%-Markierung entlang des Animationsanheftungsbereichs erreicht. Dieser Punkt ist 60px, 100px oder 150px vom unteren Rand des Scrollports entfernt, abhängig von der Größe des Elements. Die Position des Subjektelements an diesem Punkt, die die Position des Elements darstellt, wenn die from- oder 0%-Keyframe angewendet wird, wird in Gelb gezeigt.

Das Rote repräsentiert die Lage des animierten Elements im Verhältnis zum Scrollport, wenn die to- oder 100%-Keyframe angewendet wird, was das Ende der Animation darstellt. Dieser Punkt ist entweder 180px, 300px oder 450px vom unteren Rand des Scrollports entfernt, abhängig von der Größe des Subjekts. Die Animation erfolgt zwischen den to- und from-Positionen.

Vielleicht haben Sie etwas Interessantes an den gestrichelten horizontalen Linien bemerkt: Wenn die Animation beginnt, ist die Linie, die 20% vom Endrand des Viewports entfernt ist, 20% von der Oberseite des betreffenden Elements entfernt, und die Linie, die 60% vom Endrand des Viewports entfernt ist, ist 60% von der Oberseite des betreffenden Elements, wenn die Animation endet. Dies wurde durch die sehr hellgrauen Linien in der Live-Demo für dieses Beispiel illustriert.

Die Größe des Subjekts ist von Bedeutung

Wie wir gesehen haben, als wir Inset-Werte mit Längen gesetzt haben, kann die Größe des Subjekts einen Unterschied machen. Beim Festlegen von Animationsbereichen beziehen sich Prozentwerte auf die Größe des Animationsanheftungsbereichs, nicht auf den Scrollport. Für die meisten benannten Bereiche hängt die Größe des Anheftungsbereichs teilweise von der Größe des Subjekts ab. Da sich Prozentsätze auf die Größe des Bereichs beziehen, beeinflusst der benannte Bereich die aufgelöste Größe der Inset-Werte. Je nach Name kann sich auch die Startposition ändern, was den Ort des Bereichs und damit den Ort der Fortschrittspunkte beeinflusst.

In diesem Beispiel definieren wir einen aktiven Bereich, der 40% der Größe des Subjekts beträgt:

css
.animated_element {
  animation-range-start: exit-crossing -20%;
  animation-range-end: exit-crossing 20%;
}

Die Animation dauert 40% des Animationsanheftungsbereichs. Wenn Sie scrollen, sehen Sie, dass je größer das Subjekt, desto länger der Bereich. Mit exit-crossing wird der Animationsbereich nicht abgeschnitten; er hat die Größe des Subjekts, selbst wenn das Subjekt größer als der Viewport ist, wobei der Bereich den Startpunkt des Scrollports angrenzt und am Ende des Rands, wenn das Subjekt größer als der Scrollport ist, übersteht.

Mit den -20% und 20%-Inset-Werten wird die Animation des 50px-Subjekts über 20px animiert: Die Animation beginnt, wenn das untere Ende des Subjekts -10px vom Bereichsstart entfernt ist, oder 60px davon entfernt ist, den Bildschirm zu verlassen, und endet, wenn das untere Ende des Subjekts 40px davon entfernt ist, den Bildschirm zu verlassen. Das mittlere Subjekt wird über 100px animiert: Die Animation beginnt, wenn das untere Ende des Subjekts -50px vom Bereichsstart entfernt ist, was 50px vom Endrand des Scrollports entfernt ist, und endet, wenn das untere Ende des Subjekts 50px im Scrollport ist. Das große Subjekt wird über 200px animiert und beginnt, wenn das untere Ende 600px vom Startpunkt des Containers entfernt ist, wobei nur 150px sichtbar sind, und endet, wenn das untere Ende 400px von diesem Startpunkt entfernt ist, wenn 100px vom Startpunkt gescrollt wurden.

Prozentsätze gleich dem Scrollport

Wenn es darum geht, mit Prozentsätzen zu versetzen, ist der am wenigsten komplizierte benannte Timeline-Bereich contain. Mit contain hat der Animationsbereich die Größe des Scrollports, was bedeutet, dass der Start und die Endprozentsätze sich auf den Scrollport beziehen. Aus diesem Grund ist es bei der Verwendung von Inset-Werten möglicherweise sinnvoll, contain zu verwenden, anstatt den Bereich standardmäßig zu lassen und zu cover zu resolven.

Der contain Bereich umfasst die Animation vollständig innerhalb des Scrollports. Er repräsentiert den Bereich, während dem das Hauptfeld entweder vollständig vom Sichtbarkeitsbereich des Scrollports umfasst wird oder vollständig diesen überdeckt. Mit contain, wenn das Subjekt die gleiche Größe oder kleiner als der Scrollport ist, kann es vollständig sichtbar sein. Ist das Element jedoch gleich groß wie der Scrollport, erfolgt die Animation über 0px. Das bedeutet, dass sie abläuft, aber für den Benutzer nicht sichtbar ist.

Mit anderen Worten, ohne die Größe des Containers oder der Subjekte zu kennen, können wir unsere Animation auf die Mitte des Scrollports begrenzen, auch wenn die Animation über 0px abläuft, wenn das Subjekt die gleiche Größe wie der Scrollport hat.

css
.animated_element {
  animation-range-start: contain 25%;
  animation-range-end: contain 75%;
}

Die horizontalen Linien kennzeichnen die mittlere Hälfte des Scrollports und die mittlere Hälfte jedes Subjekts.

Siehe auch