Ideja je ustvariti videz diaprojekcije brez vrtiljaka. Z drugimi besedami, naredimo vrsto slik, ki jih drsimo od leve proti desni in ponovimo, ko dosežemo konec slik. Trik je v tem, da uporabljamo eno sliko v ozadju z animacijami CSS za (...)
Ideja je ustvariti videz diaprojekcije brez vrtiljaka. Z drugimi besedami, naredimo vrsto slik, ki jih drsimo od leve proti desni in ponovimo, ko dosežemo konec slik.
Trik je v tem, da uporabljamo eno sliko v ozadju z animacijami CSS, da jo premaknemo po zaslonu in ponovimo, ko je končana. To ustvarja iluzijo galerije slik, ko v resnici uporabljamo eno sliko.
Nastavitev HTML-ja
Tu je načrt, kako mora biti naš HTML strukturiran:
Delamo z dvema elementoma: tisti, ki ga pokličemo, .container
ki ustreza natančni širini vidnega polja, in drugi, ki ga pokličemo, .sliding-background
ki sedi za .container
in ga preliva. V bistvu uporabljamo .container
masko kot masko, da skrijemo celotno širino .sliding-background
slike, ko se pomika po zaslonu.
To pomeni, da moramo v oznaki HTML ustvariti samo dva elementa:
Pozicioniranje elementov
Pojdimo naprej in dodajte nekaj CSS, ki bo pravilno postavil naša dva elementa.
.container ( overflow: hidden; ) .sliding-background ( height: 500px; width: 5076px; )
Naš .container
uporablja overflow
lastnost, ki bo skrila vse, kar je vizualno v njej. Pomislite na to kot na pridelek na fotografiji. Zunaj posode so lahko dodatne stvari, vendar nam zabojnik preprečuje, da bi jih videli.
Tu nastopijo naši .sliding-background
. Nastavljena je na neko smešno širino, ki bi preplavila večino ogledov. In to je trik: to bi moralo biti nekaj, kar bi preplavilo posodo. V tem primeru uporabljamo nekoliko poljubno izbrano 5076px
širino, ki bi morala presegati večino ogledov brskalnika.
Ustvarjanje slike v ozadju
Če ustvarjamo iluzijo diaprojekcije, potrebujemo sliko, kajne? To je naš naslednji vrstni red.
Se spomnite, kako smo omenili nekoliko poljubno izbrano 5076px
širino drsnega ozadja? No, to je poljubno, a namerno v smislu, da je lepo deljivo s 3, kar ustreza časovni uri minutne zanke, ki se bo pojavila malo kasneje. To pomeni, da je platno za našo sliko v ozadju 5076 / 3
oz 1692px
. Na koncu se bo naše ozadje v neskončni zanki v eni minuti skupaj ponovilo trikrat. Matematika za zmago!
500px
Višina je resnično samovoljno. To je lahko karkoli želite in če je to tudi dejanska velikost slikovne datoteke v ozadju.
Datoteka Photoshop, ki je bila uporabljena za ustvarjanje slike ozadja za predstavitev na začetku tega poglavja, je na voljo za prenos, če iščete izhodišče.
Ko je slika shranjena (in optimizirana!), Bomo to uporabili kot sliko za ozadje v CSS:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 500px; width: 5076px; /* The image width times 3 */ )
Super! Tako dobimo gromozansko sliko, ki prelije vsebnik in jo zdaj lahko uporabljamo za neskončno drsenje po zaslonu.
Animiranje ozadja
V redu, naj se ta stvar premakne. Želimo, da gre od leve proti desni v zanki, ki se ponavlja znova in znova, da ustvari brezhiben učinek, da slika traja večno.
Najprej določimo animacijo CSS:
@keyframes .slide ( 0%( transform: translate3d(0, 0, 0); ) 100%( transform: translate3d(-1692px, 0, 0); /* The image width */ ) )
Z transform
lastnostjo uporabimo levo sliko na levem robu vsebnika, ko se začne animacija, takole:
Ko bo animacija končana, bo položaj negativno (od leve proti desni) spremenil za količino, ki ustreza natančni širini naše slike. In ker .sliding-background
je trikrat večja od širine dejanske slike, se slika pred ponovnim ciklom ponovi med 0% in 100%.
Opomba: razlog, zakaj uporabljamo dodatno
sploh ne namesto animiranja background-position
na glavnem
, je tako, da lahko uporabimo animirano transform
gibanje, kar je veliko bolj učinkovito.
V redu, zaokrožimo stvari, tako da pokličemo našo slide
animacijo na .sliding-background
predavanju:
.sliding-background ( background: url("… path/to/image") repeat-x; height: 560px; width: 5076px; animation: slide 60s linear infinite; )
animation
Lastnina naroča .sliding-background
uporabljati slide
animacijo in jo vodijo za eno minuto v času, v linearno, neskončno zanko.
Vse skupaj
.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); ) )