Otvaranje Ratova zvijezda je kultno. Učinak pomicanja teksta prema gore i dalje s ekrana bio je i ludi, kul specijalni efekt za film davne 1977. godine i kul tipografski stil koji je u to vrijeme bio potpuno nov.
Sličan učinak možemo postići s HTML-om i CSS-om! Ovaj je post više o tome kako doći do tog efekta kliznog teksta, umjesto da pokušavate iznova stvoriti puni slijed otvaranja Ratova zvijezda ili podudaranje točnih stilova korištenih u filmu, pa idemo na mjesto gdje je ovo konačni rezultat:
Pogledajte uvod u Ratove zvijezda Pen Geffa Grahama (@geoffgraham) na CodePenu.
Osnovni HTML
Prvo postavimo HTML za sadržaj:
Episode IV
It is a period of civil war. Rebel spaceships, striking from a hidden base, have won their first victory against the evil Galactic Empire.
During the battle, Rebel spies managed to steal secret plans to the Empire’s ultimate weapon, the DEATH STAR, an armored space station with enough power to destroy an entire planet.
Pursued by the Empire’s sinister agents, Princess Leia races home aboard her starship, custodian of the stolen plans that can save her people and restore freedom to the galaxy…
To nam daje sve dijelove koji su nam potrebni:
- Spremnik nazvan
star-wars
koji ćemo koristiti za pozicioniranje sadržaja. To je također potrebno jer ćemo koristitiperspective
svojstvo CSS, gdje je nadređeni element koristan način za dodavanje dubine ili iskrivljenjetransform
svojstva podređenog elementa . - Spremnik nazvan
crawl
koji će sadržavati stvarni tekst i biti element na koji primjenjujemo CSS animaciju. - Sadržaj!
Možda ste primijetili da je naslov filma zamotan u dodatni
spremnik pod nazivom title
. To nije potrebno, ali moglo bi vam pružiti dodatne mogućnosti oblikovanja ako vam zatrebaju.
Osnovni CSS
Trik je u zamišljanju trodimenzionalnog prostora u kojem tekst puže okomito gore Y-axis
i van duž Z-axis
. To ostavlja dojam da tekst istodobno klizi prema zaslonu i dalje od gledatelja.
![](1048929/star_wars_crawl_text_css-tricks.jpg.webp)
![](1048929/star_wars_crawl_text_css-tricks.jpg.webp)
Prvo, postavimo dokument tako da se zaslon ne može pomicati. Želimo da se tekst pojavi s dna zaslona, a da ga gledatelj ne može pomicati i vidjeti tekst prije nego što uđe. Možemo
overflow: hidden
to učiniti:
body ( /* Force the body to fill the entire screen */ width: 100%; height: 100%; /* Hide elements that flow outside the viewable space */ overflow: hidden; /* Black background for the screen */ background: #000; )
Sada možemo prijeći na oblikovanje našeg star-wars
spremnika, koji je nadređeni element naše demonstracije:
.star-wars ( /* Flexbox to center the entire element on the screen */ display: flex; justify-content: center; /* This is a magic number based on the context in which this snippet is used and effects the perspective */ height: 800px; /* This sets allows us to transform the text on a 3D plane, and is somewhat a magic number */ perspective: 400px; /* The rest is totally up to personal styling preferences */ color: #feda4a; font-family: 'Pathway Gothic One', sans-serif; font-size: 500%; font-weight: 600; letter-spacing: 6px; line-height: 150%; text-align: justify; )
Dalje, na crawl
element možemo primijeniti stilove . Ponovno, ovaj je element važan jer sadrži svojstva koja će transformirati tekst i biti animirana.
.crawl ( /* Position the element so we can adjust the top property in the animation */ position: relative; /* Making sure the text is fully off the screen at the start and end of the animation */ top: -100px; /* Defines the skew origin at the very center when we apply transforms on the animation */ transform-origin: 50% 100%; )
Za sada imamo gomilu teksta lijepog izgleda, ali on nije iskrivljen niti animiran. Učinimo to.
Animacija!
To je ono do čega vam je zapravo stalo, zar ne? Prvo ćemo definirati @keyframes
animaciju. Animacija radi malo više od animiranja za nas, jer ćemo transform
ovdje dodati svoja svojstva, posebno za kretanje duž Z-axis
. Animaciju ćemo započeti 0%
tamo gdje je tekst najbliži gledatelju i nalazi se ispod zaslona, izvan pogleda, a zatim ćemo završiti animaciju 100%
tamo gdje je daleko od gledatelja i teče prema gore i preko vrha zaslona.
/* We're calling this animation "crawl" */ @keyframes crawl ( 0% ( /* The element starts below the screen */ top: 0; /* Rotate the text 20 degrees but keep it close to the viewer */ transform: rotateX(20deg) translateZ(0); ) 100% ( /* This is a magic number, but using a big one to make sure the text is fully off the screen at the end */ top: -6000px; /* Slightly increasing the rotation at the end and moving the text far away from the viewer */ transform: rotateX(25deg) translateZ(-2500px); ) )
Sada, primijenimo tu animaciju na .crawl
element:
.crawl ( /* Position the element so we can adjust the top property in the animation */ position: relative; /* Defines the skew origin at the very center when we apply transforms on the animation */ transform-origin: 50% 100%; /* Adds the crawl animation, which plays for one minute */ animation: crawl 60s linear; )
Zabavna vremena uz fino podešavanje
Možete se malo više zabaviti stvarima nakon što je glavni efekt na mjestu. Na primjer, možemo dodati malo blijeđenja na vrhu zaslona kako bismo naglasili učinak puzanja teksta u daljinu:
.fade ( position: relative; width: 100%; min-height: 60vh; top: -25px; background-image: linear-gradient(0deg, transparent, black 75%); z-index: 1; )
Dodajte taj element na vrh HTML-a i tekst će teći iza gradijenta koji ide od prozirne do iste pozadine kao i :
Cjelovit primjer
Evo cjelokupnog koda iz ovog posta.
Episode IV
It is a period of civil war. Rebel spaceships, striking from a hidden base, have won their first victory against the evil Galactic Empire.
During the battle, Rebel spies managed to steal secret plans to the Empire’s ultimate weapon, the DEATH STAR, an armored space station with enough power to destroy an entire planet.
Pursued by the Empire’s sinister agents, Princess Leia races home aboard her starship, custodian of the stolen plans that can save her people and restore freedom to the galaxy…
body ( width: 100%; height: 100%; background: #000; overflow: hidden; ) .fade ( position: relative; width: 100%; min-height: 60vh; top: -25px; background-image: linear-gradient(0deg, transparent, black 75%); z-index: 1; ) .star-wars ( display: flex; justify-content: center; position: relative; height: 800px; color: #feda4a; font-family: 'Pathway Gothic One', sans-serif; font-size: 500%; font-weight: 600; letter-spacing: 6px; line-height: 150%; perspective: 400px; text-align: justify; ) .crawl ( position: relative; top: 9999px; transform-origin: 50% 100%; animation: crawl 60s linear; ) .crawl > .title ( font-size: 90%; text-align: center; ) .crawl > .title h1 ( margin: 0 0 100px; text-transform: uppercase; ) @keyframes crawl ( 0% ( top: 0; transform: rotateX(20deg) translateZ(0); ) 100% ( top: -6000px; transform: rotateX(25deg) translateZ(-2500px); ) )
Ostali primjeri
Neki su ljudi izvodili vjernije izvedbe otvaranja Ratova zvijezda koristeći druge tehnike od onih obrađenih ovdje u ovom postu.
Tim Pietrusky ima lijepo orkestriranu verziju koja koristi top
za pokret i opacity
za stvaranje efekta blijeđenja:
Pogledajte indeksiranje Star Wars-a iz 1977, Tim Pietrusky (@TimPietrusky) na CodePenu.
Yukulélé koristi margin
za pomicanje slike duž zaslona:
Pogledajte Pen Pure CSS Star Wars početno puzanje Yukuléléa (@yukulele) na CodePenu.
Karottes koristi transform
sličan ovom postu, ali se više oslanja na TranslateY
pomicanje teksta duž Y-axis
.
Pogledajte Pen Star Wars Crawl od Karottesa (@Karottes) na CodePenu.