Tanken her er å skape et lysbildefremvisning uten karusellen. Med andre ord lager vi en serie bilder som lysbildet fra venstre til høyre gjentas når enden på bildene er nådd. Trikset er at vi bruker et enkelt bakgrunnsbilde med CSS-animasjoner til (...)
Tanken her er å skape et lysbildefremvisning uten karusellen. Med andre ord lager vi en serie bilder som lysbildet fra venstre til høyre gjentas når enden på bildene er nådd.
Trikset er at vi bruker et enkelt bakgrunnsbilde med CSS-animasjoner for å flytte det over skjermen og gjenta når det er gjort. Dette skaper illusjonen til et bildegalleri når vi virkelig bruker et enkelt bilde.
Sette opp HTML
Her er en tegning for hvordan HTML-en vår må struktureres:


Det er to elementer vi jobber med: det vi ringer .container
som passer til den nøyaktige bredden på visningsområdet og et annet vi ringer .sliding-background
som sitter bak .container
og flyter over det. I hovedsak bruker vi den .container
som en maske for å skjule hele bredden av den .sliding-background
når den ruller over skjermen.
Det betyr at vi bare trenger å lage to elementer i HTML-markeringen:
Posisjonering av elementene
La oss gå videre og legge til litt CSS som vil plassere de to elementene våre riktig.
.container ( overflow: hidden; ) .sliding-background ( height: 500px; width: 5076px; )
Vår .container
bruker overflow
eiendommen som vil skjule alt som er visuelt inneholdt utenfor det. Tenk på det som en avling på et fotografi. Det kan være ekstra ting utenfor containeren, men containeren hindrer oss i å se den.
Det er der vårt .sliding-background
kommer inn i bildet. Det er satt til en latterlig bredde som vil overflyte de fleste visningsfelt. Og det er trikset: det skal være noe som vil flyte over beholderen. I dette tilfellet bruker vi en noe vilkårlig valgt 5076px
bredde som skal flyte over de fleste nettleservisninger.
Opprette bakgrunnsbildet
Vi trenger et bilde hvis vi skaper en illusjon av et lysbildefremvisningsgalleri, ikke sant? Det er vår neste ordre.
Husk hvordan vi nevnte at den noe vilkårlig valgte 5076px
bredden for den glidende bakgrunnen? Vel, det er vilkårlig, men forsettlig i den forstand at det er pent delbart med 3, som passer inn i timingen for en minuttsløyfe, som kommer opp litt senere. Det betyr at lerretet for bakgrunnsbildet vårt er 5076 / 3
eller 1692px
. Til slutt vil bakgrunnen vår gjenta totalt tre ganger på ett minutt i en uendelig løkke. Matematikk for seier!
Den 500px
høyden er virkelig tilfeldig. Det kan være hva du vil, og så lenge det også er den faktiske størrelsen på bakgrunnsbildefilen.
Photoshop-filen som ble brukt til å lage bakgrunnsbildet for demoen i begynnelsen av dette kapittelet, kan lastes ned hvis du leter etter et utgangspunkt.
Når bildet er lagret (og optimalisert!), Er det dette vi vil bruke som bakgrunnsbilde i CSS:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 500px; width: 5076px; /* The image width times 3 */ )
Flott! Det gir oss det enorme bildet som flyter over beholderen, og som nå kan brukes til å bla over skjermen ad infinitum.
Animering av bakgrunnen
Ok, la oss få denne tingen til å bevege seg. Vi vil at det skal gå fra venstre til høyre i en løkke som gjentas om og om igjen for å skape en sømløs effekt som bildet fortsetter for alltid.
La oss først definere CSS-animasjonen:
@keyframes .slide ( 0%( transform: translate3d(0, 0, 0); ) 100%( transform: translate3d(-1692px, 0, 0); /* The image width */ ) )
Vi bruker transform
egenskapen til å plassere venstre bilde i venstre kant av beholderen når animasjonen begynner, slik:


Når animasjonen er fullført, vil den ha forvandlet posisjonen negativt (fra venstre til høyre) med et beløp som samsvarer med den eksakte bredden på bildet vårt. Og siden det .sliding-background
er tre ganger bredden på det faktiske bildet, gjentas bildet tre ganger mellom 0% og 100% før det sløyfes igjen.
Merk: grunnen til at vi bruker en ekstra
i det hele tatt, i stedet for å animere background-position
på hovedtemaet
, er slik at vi kan bruke en animasjon transform
til å gjøre bevegelsen, som er mye mer performant.
OK, la oss avrunde ting ved å kalle slide
animasjonen vår til .sliding-background
klassen:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 560px; width: 5076px; animation: slide 60s linear infinite; )
Den animation
eiendom instruerer .sliding-background
å bruke slide
animasjon og å kjøre den i ett minutt om gangen i en lineær, uendelig loop.
Sette alt sammen
.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); ) )