Het idee hier is om het uiterlijk van een diavoorstelling te creëren zonder de carrousel. Met andere woorden, we maken een reeks afbeeldingen van links naar rechts en herhalen deze zodra het einde van de afbeeldingen is bereikt. De truc is dat we een enkele achtergrondafbeelding met CSS-animaties gebruiken om (...)
Het idee hier is om het uiterlijk van een diavoorstelling te creëren zonder de carrousel. Met andere woorden, we maken een reeks afbeeldingen van links naar rechts en herhalen deze zodra het einde van de afbeeldingen is bereikt.
De truc is dat we een enkele achtergrondafbeelding met CSS-animaties gebruiken om deze over het scherm te verplaatsen en te herhalen wanneer het klaar is. Dit creëert de illusie van een afbeeldingengalerij wanneer we echt één afbeelding gebruiken.
HTML instellen
Hier is een blauwdruk voor hoe onze HTML moet worden gestructureerd:
Er zijn twee elementen waarmee we werken: het element dat we aanroepen en .container
dat precies past in de breedte van de viewport en een ander element dat we .sliding-background
achter de viewport plaatsen en eroverheen lopen .container
. In wezen gebruiken we de .container
als een masker om de volledige breedte van de te verbergen .sliding-background
terwijl deze over het scherm scrolt.
Dat betekent dat we slechts twee elementen in de HTML-opmaak hoeven te maken:
Positionering van de elementen
Laten we doorgaan en wat CSS toevoegen die onze twee elementen correct positioneert.
.container ( overflow: hidden; ) .sliding-background ( height: 500px; width: 5076px; )
Onze .container
gebruiken de overflow
eigenschap die alles wat er visueel buiten staat, zal verbergen. Zie het als een uitsnede op een foto. Er kunnen extra dingen buiten de container zijn, maar de container zorgt ervoor dat we het niet kunnen zien.
Dat is waar onze .sliding-background
in het spel komt. Het is ingesteld op een belachelijke breedte die de meeste viewports zou overstromen. En dat is de truc: het zou iets moeten zijn dat de container zou overlopen. In dit geval gebruiken we een enigszins willekeurig gekozen 5076px
breedte die de meeste browserviewports zou moeten overstromen.
De achtergrondafbeelding maken
We hebben een afbeelding nodig als we de illusie van een diavoorstellingsgalerij creëren, toch? Dat is onze volgende opdracht.
Weet je nog hoe we dat de ietwat willekeurig gekozen 5076px
breedte voor de schuivende achtergrond noemden ? Nou, het is willekeurig, maar opzettelijk in de zin dat het mooi deelbaar is door 3, wat past in de timing voor een minuutlange lus, die iets later zal verschijnen. Dat betekent dat het canvas voor onze achtergrondafbeelding 5076 / 3
of is 1692px
. Uiteindelijk zal onze achtergrond zich in totaal drie keer in één minuut herhalen in een oneindige lus. Wiskunde voor de overwinning!
De 500px
hoogte is werkelijk willekeurig. Dat kan zijn wat u maar wilt en zolang het maar ook de werkelijke grootte is van het achtergrondafbeeldingsbestand.
Het Photoshop-bestand dat aan het begin van dit hoofdstuk is gebruikt om de achtergrondafbeelding voor de demo te maken, kan worden gedownload als u op zoek bent naar een startpunt.
Zodra de afbeelding is opgeslagen (en geoptimaliseerd!), Is dit wat we zullen gebruiken als achtergrondafbeelding in de CSS:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 500px; width: 5076px; /* The image width times 3 */ )
Super goed! Dat geeft ons het gigantische beeld dat over de container loopt en nu kan worden gebruikt om oneindig over het scherm te scrollen.
Animeren van de achtergrond
Oké, laten we dit ding laten bewegen. We willen dat het van links naar rechts gaat in een lus die zich keer op keer herhaalt om een naadloos effect te creëren dat het beeld voor altijd doorgaat.
Laten we eerst de CSS-animatie definiëren:
@keyframes .slide ( 0%( transform: translate3d(0, 0, 0); ) 100%( transform: translate3d(-1692px, 0, 0); /* The image width */ ) )
We gebruiken de transform
eigenschap om de linkerafbeelding aan de linkerrand van de container te plaatsen wanneer de animatie begint, zoals:
Tegen de tijd dat de animatie is voltooid, heeft deze de positie negatief (van links naar rechts) getransformeerd met een hoeveelheid die overeenkomt met de exacte breedte van onze afbeelding. En aangezien het .sliding-background
driemaal de breedte van het werkelijke beeld is, wordt het beeld driemaal herhaald tussen 0% en 100% voordat het opnieuw wordt herhaald.
Opmerking: de reden waarom we een extra
helemaal niet, in plaats van te animeren background-position
op de hoofdpagina
, zodat we een geanimeerde transform
beweging kunnen gebruiken , die veel performanter is.
Oké, laten we de zaken afronden door onze slide
animatie voor de .sliding-background
klas aan te roepen :
.sliding-background ( background: url("… path/to/image") repeat-x; height: 560px; width: 5076px; animation: slide 60s linear infinite; )
De animation
eigenschap instrueert de .sliding-background
om de slide
animatie te gebruiken en deze één minuut per keer in een lineaire, oneindige lus uit te voeren.
Alles samenvoegen
.container ( overflow: hidden; ) .sliding-background ( background: url("… path/to/image") repeat-x; height: 560px; width: 5076px; animation: slide 60s linear infinite; ) @keyframes slide( 0%( transform: translate3d(0, 0, 0); ) 100%( transform: translate3d(-1692px, 0, 0); ) )