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 von Zeitlinienbereichsnamen

Standardmäßig verfolgen Ansichts-Fortschritts-Zeitleisten Elemente über den gesamten Scrollbereich. Die Animationszeitleiste beginnt, wenn das erste Pixel der Startkante des Elements die Endkante des Scrollports überquert, und endet, wenn die Endkante des Elements die Startkante des Scrollports überquert. Sie können diesen Standardbereich für die Animationsanbindung ändern. Zum Beispiel können Sie die Ansichts-Fortschritts-Zeitleiste darauf beschränken, erst zu beginnen, wenn das Subjektelement vollständig in den Scrollbereich eingetreten ist.

Dieser Leitfaden erklärt, wie Sie die Namen von Zeitlinienbereichen ändern können, und untersucht spezifisch die verschiedenen Namen von Zeitlinienbereichen, deren Bedeutungen und wie sie verwendet werden.

Einleitung in die Ansichts-Fortschritts-Zeitleiste

CSS-Animationen werden erstellt, indem @keyframes-Animationen mit der animation-name-Eigenschaft (oder der animation-Kurzform) an ein Element angehängt werden. Die Keyframes definieren das Verhalten der Animation, während die animation-timeline bestimmt, wann und wie das Element durch diese Keyframes fortschreitet.

Standardmäßig ist die Zeitleiste der Animation die dokumentenbasierte DocumentTimeline. Mit CSS scroll-gesteuerten Animationen wird die Zeitleiste der Animation, oder deren Fortschritt, entweder durch das Scrollen des Benutzers (Scroll-Fortschritts-Zeitleisten) oder durch die Sichtbarkeit des Elements (Ansichts-Fortschritts-Zeitleisten) angetrieben, anstatt durch den Zeitablauf.

Bei Ansichts-Fortschritts-Zeitleisten ist das Fortschreiten der Keyframes daran gebunden, wie viel des Subjektelements innerhalb des Scrollers sichtbar ist und seine Position innerhalb des Scrollers. Wenn das Element den Viewport betritt, schreitet die Zeitleiste voran. Wenn der Benutzer das Scrollen umkehrt, umkehrt sich die Zeitleiste. Mit anderen Worten: Wenn das Element in den Sichtbereich kommt oder sich daraus herausbewegt, schreitet die Zeitleiste voran oder bewegt sich rückwärts. Die Animation erfolgt nur, wenn das Subjekt innerhalb seines Scrollports sichtbar ist. Stoppt das Scrollen, während das Element sichtbar ist, pausiert die Animation.

Standard-Ansichts-Fortschritts-Zeitleiste

Standardmäßig beginnt der Fortschritt der Ansichts-Fortschritts-Zeitleiste, wenn die Startkante des verfolgten Subjekts die Endkante des Scrollports überschneidet, und endet, wenn die Endkante des Subjekts die Startkante des Scrollports verlässt. Dies sind die oberen und unteren Kanten des Subjekts und des Scrollports beim vertikalen Scrollen, und die linken und rechten oder rechten und linken Kanten beim horizontalen Scrollen, abhängig vom Schreibmodus.

In dem folgenden Beispiel versuchen Sie nach unten zu scrollen. Beachten Sie, wie die Animation beginnt, sobald die obere Kante des animierten Elements mit der unteren Kante des Scrollcontainers ausgerichtet ist und endet, indem 100% Fortschritt erreicht wird, wenn die untere Kante mit der oberen Kante des Containers ausgerichtet ist, unabhängig davon, wie hoch das animierte Element ist.

Der Schreibmodus und die Scrollrichtung des Scrollcontainers bestimmen die Start- und Endkanten des Scrollcontainers.

Der Animationsanbindungsbereich

Standardmäßig wird das Element die ganze Zeit animiert, während irgendein Teil des Subjektelements sichtbar ist. Dies bedeutet, dass der Standard-Animationsanbindungsbereich die Summe der Höhe des Scrollcontainers und der Höhe des Subjektelements ist, wobei diese zusätzliche Höhe an der Endkante des Scrolls vorhanden ist.

Im vorherigen Beispiel ist der Scrollcontainer standardmäßig 250px hoch und das animierte Element 50px hoch, was bedeutet, dass der vertikale Animationsanbindungsbereich 300px hoch ist. Wenn das Subjekt auf 250px gesetzt ist, wird der Bereich 500px; wenn das Element auf 500px gesetzt ist, wächst die Größe des Animationsanbindungsbereichs auf 750px.

Das Modul CSS scroll-gesteuerte Animationen bietet Mechanismen zum Definieren verschiedener Animationsanbindungsbereiche. Die Eigenschaften animation-range-start und animation-range-end, die beide mit der animation-range-Kurzform festgelegt werden können, definieren den Anbindungsbereich für die Startkante und die Endkante des Animationsbereichs, zusammen mit möglichen Einfügungen von beiden Kanten.

Die Eigenschaften der Animationsbereiche akzeptieren das Schlüsselwort normal, einen <timeline-range-name>, einen <length-percentage> oder sowohl einen <timeline-range-name> als auch den <length-percentage>. In diesem Leitfaden behandeln wir nur die Werte für die Komponente <timeline-range-name> des Werts.

Zeitlinienbereichsnamen

Der <timeline-range-name>-Werttyp akzeptiert sechs Schlüsselwörter: cover, contain, entry, exit, entry-crossing und exit-crossing. Jedes dieser Schlüsselwörter stellt einen vordefinierten benannten Zeitlinienbereich dar. Ein benannter Zeitlinienbereich ist ein benanntes Segment einer Animationszeitleiste. Diese Schlüsselwörter ermöglichen es dem Entwickler, die Basis für den Animationsanbindungsbereich festzulegen, auf die sich Offsets beziehen. Der Beginn des Segments wird als 0% Fortschritt durch den Bereich dargestellt; das Ende des Segments als 100% Fortschritt durch den Bereich. Wo sich diese Punkte befinden, hängt vom verwendeten benannten Bereich ab.

Cover

Der Animationsanbindungsbereich in den vorherigen Beispielen deckt den gesamten Bereich „ab“. Dieser Bereich repräsentiert den vollständigen Bereich der Ansichts-Fortschritts-Zeitleiste. 0% Fortschritt repräsentiert den Punkt, an dem die Start-Border-Kante des Subjekts mit der Endkante des Scrollports übereinstimmt, und 100% Fortschritt repräsentiert den Punkt, an dem die End-Border-Kante des Subjekts die Startkante des Scrollports erreicht. Wie wir gesehen haben, entspricht die Größe der „Cover“-Reichweite der Summe der Dimensionen von Subjekt und Scrollport in der Scrollrichtung. In allen bisher gezeigten Beispielen entspricht die Höhe des Animationsanbindungsbereichs der Höhe des Containers plus der Höhe des animierten Elements.

Der standardmäßige benannte Zeitleistenbereich ist cover. Wir hätten den <timeline-range-name> explizit setzen können, um die gleichen Ergebnisse zu erzielen:

css
.animated_element {
  animation-range-start: cover;
  animation-range-end: cover;
}

Das Bild veranschaulicht die Animationszeitleiste. Der Standort des Elements, wenn es den 0%-Punkt des Animationsanbindungsbereichs erreicht, wird als gelber Block dargestellt. Dies repräsentiert die Position des Elements, wenn der from-Keyframe angewendet wird. Der rote Block repräsentiert die Position des Subjektelements relativ zum Scrollport, wenn der to-Keyframe angewendet wird. Dies ist die Position des animierten Elements, wenn es das Ende der Animation erreicht.

Abhängig von der Größe des Subjektelements und des gewählten Zeitlinienbereichs können sich Start- und Endpositionen überlappen. Bereiche der Überlappung (wie in den folgenden Diagrammen zu sehen) werden durch gestreifte rote und gelbe Bereiche dargestellt.

Contain

Der benannte Zeitleistenbereich "contain" enthält die Animation vollständig innerhalb des Scrollports — der Bereich beginnt, wenn das animierte Element zu 100% sichtbar ist und endet, wenn es nicht mehr vollständig sichtbar ist, falls es vollständig sichtbar sein kann.

Der Wert contain stellt den Bereich dar, während derer die wichtigste Box entweder vollständig durch oder vollständig in ihrem Sichtbarkeitsbereich des Ansichts-Fortschritts im Scrollport enthalten ist, abhängig davon, ob das Subjektelement kleiner (kann vollständig enthalten sein) oder größer als der Scrollport ist.

  • Wenn das Element in Scrollrichtung kleiner als der Scrollport ist, tritt 0% ein, wenn die End-Border-Kante des animierten Elements mit der Endkante des Scrollports übereinstimmt, und 100%, wenn die Start-Border-Kante des animierten Elements mit der Startkante des Scrollports übereinstimmt. Mit anderen Worten: Der contain-Wert reicht von dem Punkt, an dem das Subjektelement erstmals vollständig im Scrollport enthalten ist (0%), bis zu dem Punkt, an dem es nicht länger vollständig im Scrollport enthalten ist (100%).

  • Wenn das Element größer als der Scrollport ist, tritt der 0%-Fortschritt ein, wenn die Start-Border-Kante des animierten Elements die Startkante des Scrollports erreicht, und 100%, wenn die End-Border-Kante mit der Endkante übereinstimmt. Mit anderen Worten, wenn die Animation größer als ihr Container ist, ist das animierte Element niemals vollständig sichtbar, da es nicht im Scrollport "enthalten" ist. Die Animation beginnt, wenn die Startkante die Startkante des Scrollports erreicht, und endet, wenn die Endkante des animierten Elements die Endkante des Containers erreicht.

  • Wenn das animierte Element die gleiche Größe wie sein Container hat, findet die Animation dennoch statt, jedoch über 0px, was für den Benutzer nicht sichtbar ist.

css
.animated_element {
  animation-range: contain;
}

In diesem Beispiel beträgt die ursprüngliche Höhe des animierten Elements 20% der Höhe des Scrollports und kann daher vollständig darin enthalten sein. Wie zuvor erklärt, sollte die Animation beginnen, sobald das Element beginnt, den Scrollport zu betreten, und enden, sobald es beginnt, den Scrollport zu verlassen.

Wenn Sie die Radiotaste 500px aktivieren, wird das Subjekt doppelt so groß wie der Scrollport. Der Animationsbereich beginnt, wenn das Subjektelement den Scrollport erstmals vollständig bedeckt, mit dem 0%-Punkt, dem Fortschritt ist, wenn die Startkante die Startkante des Containers erreicht. Es endet, wenn das Element nicht länger den Scrollport vollständig bedeckt, mit dem 100%-Punkt, der auftritt, wenn die Endkante die Endkante des Containers überkreuzt.

Wenn das Subjekt die gleiche Größe wie der Scrollcontainer hat, wie bei Auswahl von 250px vorgesehen, findet die Animation immer noch statt, jedoch über 0px. Da die 0% und 100% zur gleichen Zeit auftreten, ist die Animation augenblicklich. Der Unterschied im Styling ist nur erkennbar, weil die Eigenschaften, die im 100%-Keyframe-Zustand definiert sind, nach dem Ende der Animation angewendet werden. Dies liegt daran, dass die Eigenschaft animation-fill-mode auf forwards eingestellt ist. Andernfalls würde das mittlere 250px große Subjekt, das die gleiche Höhe wie der Scrollcontainer hat, überhaupt nicht zu animieren scheinen.

Die Animation findet statt, wenn das Objekt sich innerhalb der durch das Weiß des Containers im 50px-Beispiel und durch die rot/gelben Bereiche im 250px- und 500px-Beispiel dargestellten Bereiche befindet.

Einige könnten es hilfreich finden, die Werte cover und contain zu vergleichen. Wir können die Kurzform-Eigenschaft animation-range verwenden, um die Eigenschaften animation-range-start und animation-range-end auf denselben <animation-name-range>-Wert zu setzen:

css
#A {
  animation-range: contain;
}
#B {
  animation-range: cover;
}

Wählen Sie verschiedene Radioknöpfe und scrollen Sie den Scrollport, um die Effekte der Werte cover und contain auf Animationen zu vergleichen.

Lassen Sie uns die anderen <timeline-range-name> Schlüsselwortwerte betrachten!

Entry und Exit

Um die gesamte Animation nur dann ablaufen zu lassen, wenn das Subjekt dabei ist, den Scrollport zu betreten oder zu verlassen, verwenden Sie die Werte entry oder exit. Bei diesen beiden Werten basiert der Animationsanbindungsbereich auf der Größe des animierten Elements und nicht auf der Größe des Scrollports.

Entry

Bei entry tritt 0%-Fortschritt im Moment ein, wenn das animierte Element beginnt, den Scrollport zu betreten, wenn die Startkante des Subjekts die Endkante des Scrollports überquert.

Die gesamte Animation erfolgt, wenn das Subjekt ins Sichtfeld gelangt und endet, wenn es vollständig sichtbar wird oder wenn es die Startkante erreicht; was auch immer zuerst eintritt. Ist das animierte Element kleiner als der Scrollport, entspricht der Animationsanbindungsbereich der Größe des Subjekts.

Die Position bei 0%-Fortschritt wird in Gelb dargestellt. Die Position bei 100%-Fortschritt wird in Rot dargestellt. Wenn das animierte Element größer als der Scrollport ist, überlappen sich diese beiden Positionen, was durch einen gestreiften Hintergrund angezeigt wird.

Bei entry entspricht der Animationsanbindungsbereich entweder der Größe des animierten Elements oder der Größe des Containers, je nachdem, was kleiner ist. Wenn das Subjekt größer als der Scrollport ist, entspricht der Animationsanbindungsbereich dem gesamten Scrollport. Bei entry tritt 100% ein, wenn die Endkante des Subjekts die Endkante des Scrollports überquert oder, wenn das animierte Element in Scrollrichtung größer als der Scrollport ist, wenn die Startkante des animierten Elements die Startkante des Scrollports erreicht.

Die Einstellung animation-range-start: entry ist dasselbe wie die Einstellung animation-range-start: cover. Die Einstellung animation-range-end: entry ist gleichbedeutend mit animation-range-end: contain.

Exit

Der Wert exit ist das Gegenteil von entry. Bei exit beginnt der Anbindungsbereich, wenn die Startkante des animierten Elements die Startkante des Scrollports überquert.

Der 0%-Fortschritt erfolgt, wenn die Startkante des Subjekts die Startkante des Scrollports erreicht. Der 100% Fortschritt erfolgt, wenn die Endkante des Subjekts die Startkante überschreitet. Die Einstellung animation-range-start: exit 0% entspricht der Einstellung animation-range-start: contain 100%. Die Einstellung animation-range-end: exit 100% entspricht animation-range-end: cover 100%.

Vergleich von Entry und Exit

Es kann hilfreich sein, entry und exit nebeneinander zu betrachten, um zu verstehen, welche Auswirkungen die Größe des Subjekts auf den Animationsanbindungsbereich hat: bei diesen beiden Werten ist der Animationsanbindungsbereich nie größer als der Container.

css
#A {
  animation-range: entry;
}
#B {
  animation-range: exit;
}

Scrollen Sie die Ansichtsbox, um den Bereich der entry- und exit-Werte zu sehen, ändern Sie dann die Größe der Subjekte mit den Radiotasten und scrollen Sie erneut.

Wenn die Subjekte klein genug sind, um vollständig im Scrollport enthalten zu sein, befindet sich die Animationsanbindungszeitleiste am Anfang (entry) oder Ende (exit) des Scrollports und die Größe des Anbindungsbereichs ist auf die Größe des animierten Elements in Scrollrichtung beschränkt.

Mit entry und exit ist der Animationsbereich auf die Größe des Scrollports beschränkt, während das Element nicht beschränkt ist.

Wenn das Subjektelement die Größe des Scrollports hat oder größer ist:

  • Im Fall von entry endet die Animation, wenn das Element den Scrollport in Scrollrichtung vollständig abdeckt.
  • Im Fall von exit beginnt die Animation erst, wenn das Element den Scrollport in Scrollrichtung vollständig abdeckt.

Dies mag nicht der gewünschte Effekt sein. Wenn Sie möchten, dass eine Entry-Animation weiterhin läuft, bis das gesamte Element die Startkante des Scrollports vollständig durchlaufen hat, oder wenn Sie möchten, dass eine Exit-Animation beginnt, sobald das Element beginnt, die Endkante des Scrollports zu verlassen, müssen Sie entry-crossing und exit-crossing verwenden.

Entry- und Exit-Crossing

Wenn das Subjektelement kleiner als der Scrollport ist und Sie möchten, dass die vollständige Animation abläuft, während es den Scrollport betritt oder verlässt, können Sie problemlos entry oder exit verwenden.

Wenn das Subjekt größer als der Scrollport ist, läuft die Animation nicht über den gesamten Verlauf des Elements, das den Scrollport betritt oder verlässt. Der Wert entry setzt den 100%-Fortschritt auf den Punkt, an dem die Startkante des Elements die Startkante des Scrollports erreicht, bevor das Element den Scrollport vollständig betreten hat. Bei exit passiert der 0%-Fortschritt, wenn die Endkante des Elements die Endkante des Scrollcontainers erreicht, während ein Teil des Subjekts bereits den Scrollport verlassen hat. Bei beiden Werten ist der Animationsanbindungsbereich kleiner als das Subjekt. Wenn dies nicht der gewünschte Effekt ist, könnten die *-crossing-Werte die Lösung sein, die Sie suchen.

Entry-Crossing

Der Wert entry-crossing stellt den Bereich dar, während dem das animierte Element die Endkante des Scrollports überquert, wobei 0% Fortschritt erreicht wird, wenn die Startkante des Elements mit der Endkante des Scrollports übereinstimmt und 100% Fortschritt erreicht wird, wenn die Endkante des Elements die Endkante des Scrollports erreicht, was bedeutet, dass es den Scrollport vollständig betreten hat.

Es kann hilfreich sein, die beiden Werte in einem Live-Beispiel zu vergleichen.

css
#A {
  animation-range: entry;
}
#B {
  animation-range: entry-crossing;
}

Wählen Sie die verschiedenen Höhenwerte aus und scrollen Sie dann, um entry mit entry-crossing für jede Größe zu vergleichen.

Beachten Sie, wie die Effekte ähnlich sind, außer wenn 500px ausgewählt ist und das animierte Element größer als der Container ist. Der entry-crossing-Bereich produziert die gleichen Ergebnisse wie entry, wenn das Element gleich oder kleiner als der Scrollport ist, aber wenn das Element größer als der Scrollport ist, tritt 100% später ein, und zwar erst, wenn die Endkante in den Sichtbereich eingetreten ist. Der Animationsanbindungsbereich entspricht der Größe des Subjekts und ist nicht auf die Größe des Scrollports beschränkt.

Exit-Crossing

Der Wert exit-crossing stellt den Bereich dar, während dem das animierte Element die Startkante des Scrollports überquert, wobei 0% Fortschritt erreicht wird, wenn die Startkante des Elements mit der Startkante des Scrollports übereinstimmt und 100% Fortschritt erreicht wird, wenn die Endkante des Elements die Startkante des Scrollports erreicht.

Bei exit-crossing beginnt die Animation, sobald das Subjekt den Scrollport bedeckt (bei exit beginnt die Animation erst, wenn die Endkante des Subjekts in den sichtbaren Bereich gelangt). In beiden Fällen läuft die Animation, bis das Subjekt die Startkante des Scrollports vollständig verlässt.

css
#A {
  animation-range: exit;
}
#B {
  animation-range: exit-crossing;
}

Der exit-crossing-Wert produziert die gleichen Ergebnisse wie exit, wenn das Element gleich oder kleiner als der Scrollport ist, aber wenn das Element größer als der Scrollport ist, tritt 0% früher ein, und zwar sobald die Startkante des Elements die Startkante des Scrollports erreicht, anstatt zu warten, bis die Endkante des Elements den Scrollport erreicht.

Wie bei entry-crossing entspricht der Animationsanbindungsbereich der Größe des Subjekts und ist nicht auf die Größe des Scrollports beschränkt.

Siehe auch