trigger-scope CSS property
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Mit der CSS-Eigenschaft trigger-scope lässt sich der Geltungsbereich eines Trigger-Namens für eine scrollgesteuerte Animation auf einen Teilbaum des Dokuments beschränken.
Syntax
/* Keywords */
trigger-scope: none;
trigger-scope: all;
/* <dashed-ident> */
trigger-scope: --my-trigger;
/* Multiple values */
trigger-scope: --my-trigger, --another-trigger;
/* Global values */
trigger-scope: inherit;
trigger-scope: initial;
trigger-scope: revert;
trigger-scope: revert-layer;
trigger-scope: unset;
Werte
Angegeben als none, all oder als kommagetrennte Liste von <dashed-ident>-Werten:
none-
Legt fest, dass der Geltungsbereich von Triggern nicht eingeschränkt wird. Dies ist der Standardwert.
all-
Beschränkt den Geltungsbereich so, dass alle im Teilbaum festgelegten
timeline-trigger-name-Werte nur animierten Elementen im selben Teilbaum zugeordnet werden können. <dashed-ident>-
Ein Trigger-Name. Beschränkt den Geltungsbereich so, dass die angegebenen
timeline-trigger-name-Werte, wenn sie im Teilbaum festgelegt werden, nur animierten Elementen im selben Teilbaum zugeordnet werden können.
Beschreibung
Mit der Eigenschaft trigger-scope lässt sich der Geltungsbereich von Triggern bei scrollgesteuerten Animationen auf bestimmte Teilbäume von Elementen beschränken.
Trigger-Namen werden mit der Eigenschaft timeline-trigger-name definiert und sind standardmäßig global gültig. Wenn ein animiertes Element über seine Eigenschaft animation-trigger einem Trigger-Namen zugeordnet ist, bestimmt der Browser das zugehörige Trigger-Element wie folgt:
- Er durchsucht die Vorfahren des animierten Elements aufwärts, bis er ein Element findet, dessen
timeline-trigger-namemit dem Namen übereinstimmt, auf den der Wert vonanimation-triggerverweist. Ist das animierte Element selbst der Trigger, wird es sofort gefunden. - Findet er unter den Vorfahren keinen passenden Trigger, verwendet er das letzte Element in der HTML-Quellreihenfolge mit diesem
timeline-trigger-name-Wert. - Findet er im DOM kein Element mit diesem
timeline-trigger-name-Wert, wird das animierte Element nicht durch Scrollen ausgelöst. Da keine zugehörige Timeline vorhanden ist, findet die Animation nicht statt.
Wenn mehrere Elemente Trigger mit demselben Trigger-Namen definieren, wird nur das letzte Element im Dokumentbaum als Trigger für animierte Elemente verwendet, die in ihrer animation-trigger-Eigenschaft auf diesen Namen verweisen. Das ist wahrscheinlich nicht das gewünschte Verhalten.
Die Eigenschaft trigger-scope kann dieses Problem lösen, indem sie den Geltungsbereich eines Trigger-Namens auf einen Teilbaum des Dokuments beschränkt. Dadurch ist der Trigger nur für Elemente innerhalb desselben Teilbaums sichtbar und hat keine Auswirkungen auf Elemente außerhalb. Wenn trigger-scope für ein Element festgelegt ist und dieses Element oder seine Nachfahren als Trigger definiert sind, werden animierte Elemente diesen Triggern nur zugeordnet, wenn sie sich im selben Teilbaum befinden.
Welche Trigger-Namen in den Geltungsbereich fallen, hängt vom festgelegten trigger-scope-Wert ab:
trigger-scope: allbedeutet, dass alle Trigger-Namen in den Geltungsbereich fallen.trigger-scope: --my-trigger, --another-triggerbedeutet, dass nur Trigger mit den Namen--my-triggerund/oder--another-triggerin den Geltungsbereich fallen.trigger-scope: nonebedeutet, dass für das Element keine Einschränkung des Trigger-Geltungsbereichs festgelegt ist.
Formale Definition
| Anfangswert | none |
|---|---|
| Anwendbar auf | alle Elemente |
| Vererbt | Nein |
| Berechneter Wert | wie angegeben |
| Animationstyp | Not animatable |
Formale Syntax
trigger-scope =
none |
all |
<dashed-ident>#
Beispiele
>Grundlegende Verwendung
Dieses Beispiel zeigt, wie sich mit der Eigenschaft trigger-scope der Geltungsbereich eines animation-trigger-name beschränken lässt.
HTML
Wir verwenden drei <section>-Elemente, die jeweils zwei <div>-Elemente enthalten: ein .animated-Element und ein .trigger-Element.
Der Großteil des HTML-Codes, einschließlich eines Kontrollkästchens, mit dem sich die Eigenschaft trigger-scope aktivieren oder deaktivieren lässt, wurde der Kürze halber ausgeblendet.
<section id="one">
<div class="animated"></div>
...
<div class="trigger">Trigger for first animation</div>
...
</section>
<section id="two">
<div class="animated"></div>
...
<div class="trigger">Trigger for second animation</div>
...
</section>
<section id="three">
<div class="animated"></div>
...
<div class="trigger">Trigger for third animation</div>
...
</section>
CSS
Wir definieren drei @keyframes-Animationen. Jede wird auf ein anderes .animated-Element angewendet.
@keyframes fade-in {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes color-cycle {
from {
background: red;
scale: 1;
}
to {
background: blue;
scale: 2;
}
}
@keyframes move-up-down {
25% {
translate: 0 -20px;
}
75% {
translate: 0 20px;
}
}
Die position der animierten Elemente wird auf fixed gesetzt. Dadurch werden sie nahe am oberen Rand des Scrollports positioniert und bleiben jederzeit sichtbar.
Alle animierten Elemente haben denselben animation-trigger-Wert: Ihre Animationen werden durch einen Trigger mit dem timeline-trigger-name --t ausgelöst. Die Animationen werden abgespielt, wenn ihr Trigger aktiviert wird, und zurückgesetzt, wenn er deaktiviert wird.
.animated {
position: fixed;
top: 10px;
animation-trigger: --t play reset;
}
Über die Kurzschreibweise animation erhält jedes .animated-Element einen anderen animation-name. Außerdem haben die Elemente jeweils einen anderen left-Wert, damit sie nicht übereinander positioniert werden.
#one .animated {
animation: fade-in 1s infinite alternate ease-in;
left: 10px;
}
#two .animated {
animation: color-cycle 1s infinite alternate linear;
left: 110px;
}
#three .animated {
animation: move-up-down 2s infinite linear;
left: 210px;
}
Die .trigger-Elemente werden als Trigger für die .animated-Elemente festgelegt. Dazu erhalten sie einen timeline-trigger-name-Wert mit demselben Bezeichner --t sowie den timeline-trigger-source-Wert view(). Wir setzen timeline-trigger-activation-range auf contain und belassen timeline-trigger-active-range beim Standardwert, der hier demselben Wert entspricht. Dadurch erfolgen die Aktivierung und Deaktivierung, während der Trigger noch sichtbar ist. Außerdem legen wir einige einfache Stile fest, damit sich die Trigger vom übrigen Text abheben.
.trigger {
timeline-trigger-name: --t;
timeline-trigger-source: view();
timeline-trigger-activation-range: contain;
padding: 10px;
border: 2px solid black;
background: black;
color: white;
}
Abschließend setzen wir trigger-scope für die <section>-Elemente auf all. Dadurch wird die Wirkung jedes Triggers mit dem Namen --t auf das jeweilige Vorfahrenelement <section> beschränkt.
section {
trigger-scope: all;
}
Ergebnis
Scrollen Sie im Beispiel nach unten. Es wird jeweils nur ein Quadrat animiert. Der Grund dafür ist, dass jedes Quadrat nur dann animiert wird, wenn das Trigger-Element im selben Geltungsbereich (demselben <section>) im Scrollport sichtbar ist. Obwohl die drei Trigger denselben Trigger-Namen verwenden, wird die Animation jedes .animated-Elements von einem anderen Trigger ausgelöst.
Aktivieren Sie nun das Kontrollkästchen, um trigger-scope: all von den <section>-Elementen zu entfernen. Scrollen Sie erneut durch den Inhalt. Keines der Quadrate wird animiert, bis das dritte .trigger-Element im Scrollport sichtbar ist. Dann beginnen alle Quadrate gleichzeitig mit ihrer Animation. Da die Beschränkung des Geltungsbereichs entfernt wurde, wird die Animation jedes .animated-Elements durch das letzte Element mit --t als timeline-trigger-name aktiviert und deaktiviert.
Spezifikationen
| Spezifikation |
|---|
| Animation Triggers> # propdef-trigger-scope> |
Browser-Kompatibilität
Siehe auch
animation-triggertimeline-trigger-name,timeline-trigger-source,timeline-trigger-activation-rangeundtimeline-trigger-active-range- Kurzschreibweise
timeline-trigger - Typ
<animation-action> - CSS-Animationen verwenden, die durch Scrollen ausgelöst werden
- Modul CSS-Animationstrigger
- Modul CSS-Animationen