Animation scroll-timline-name

WasserturmHochofenZahnradOfenContainerGerüst

Info

Hier wird ein HTML Element animiert anhand der Scrollleisten Position eines anderen, übergeordneten Elements, welches einen Scrollleisten Namen bekommt.

Wir haben hier das übergeordnete Element .scroller

Direkt darin liegt ein Element .infoBox

Desweiteren liegen unter .infoBox aber innerhalb von .scroller mehrere img Elemente.

scroll-timline-name

Der .scroller bekommt einen Namen für seine Scrollleiste zugewiesen. Der Name muss mit 2 Bindestrichten beginnen.
--gallery__scrollcontainer

scroll-timline-axis

scroll-timeline-axis kann man mit x oder inline versehen.
scroll-timeline-axis: inline;

Beide Eigenschaften kann man in der Kurzschreibweise: scroll-timeline zusammenfassen.

scroll-timeline: --gallery__scrollcontainer inline;

Das animierte Element

Das animierte Element ist eine ul mit der Klasse .subject, welche im Element .infoBox liegt.

Das Element .infoBox hat position: absolute es richtet sich am Vorfahren .scroller aus, da das position:relative hat. .infoBox bekommt keine Positionseigenschaften, wie left oder top, dadurch bleibt es an der Stelle liegen, wo es definiert ist, oben links in der Ecke von .scroller.

.infoBox bekommt eine feste Breite und Höhe und overflow:hidden

In .infoBox liegt die ul-Liste .subject welche auch mit position:absolute ausgezeichnet wird und welche animiert wird.

In der @keyframes Regel namens scrollInfo wird die vertikale Anfangsposition und Endposition definiert.

Wie üblich wird der Verweis auf diese scrollInfo @keyframes - Regel gesetzt und animation-timing-function: linear zugefügt.

Die richtige Scrollleiste wird hinzugefügt mit:

animation-timeline: --gallery__scrollcontainer;

Einschnappen

Damit das Scrollen bei jedem Bild einschnappt, bekommt .scroller
scroll-snap-type: x mandatory;

Die Bilder bekommen:
scroll-snap-align: center;

HTML

 <div class="scroller">
            <div class="infoBox">
            <ul class="subject">
            <li>Wasserturm</li>
            <li>Kühltürme</li>
            <li>Zahnrad</li>
            <li>Ofen</li>
            <li>Container</li>
            <li>Gerüst</li>
            </ul>
            </div>


            <img src="../img/ind1.jpg" alt="Wasserturm">
            <img> ...

            </div>

CSS

            .scroller img{
            scroll-snap-align: center;
            }

            .scroller {
            max-width: 300px;
            margin: auto;
            overflow-x: scroll;
            scroll-timeline: --gallery__scrollcontainer inline;
            scroll-snap-type: x mandatory;
            white-space: nowrap;
            }

            .infoBox {
            position: absolute;
            text-align: center;
            padding: 0;
            height: 1.5em;
            width: 5.5em;
            overflow: hidden;
            background-color: rgba(255, 255, 255, 0.8);
            }

            .subject {
            padding: 0;
            list-style-type: none;
            margin: 0;
            position: absolute;
            bottom: -11em;
            animation-name: scrollInfo;
            animation-timing-function: linear;
            animation-timeline: --gallery__scrollcontainer;
             /*für Firefox*/
            animation-duration: 1ms;
            }

            .subject li {
            padding: 0.5em 5px;
            }

            @keyframes scrollInfo {
            from {
            bottom: -11em;
            }

            to {
            bottom: -0.3em;
            }
            }