CSS3: Čas na animáciu?
Vždy keď sa stretnete s niečím, čo Vás môže obohatiť, premýšlate, či to skutočne zvládnete, alebo nie. Ja som človek, čo si rád zašomre, bo sa mu nechce, ale nakoniec mi to nedá a skúšam hľadať riešenia. Čo sa mi prihodilo? Prerábal som banner z flash-u do CSS3. Fuuu. A ako?
Skúste si to predstaviť. Dostanete SWF súbor v ktorom je (našťastie) jednoduchá animácia. Nejaké tie posuny textu plus efekt typu fade-in a fade-out. Viacmenej nejaké 4 textové slajdy. Prvé čo mi napadlo bolo, že určite existuje niečo, čo by vedelo prekonvertovať SWF do HTML, no nie? A tak som - ako správny neťák - guuuglil. Narazil som priamo na nástroj, ktorý vytvorili v Google Labs - Swiffy [Swiffy na gLabs]. Nahráte Vaše swf a čakáte, čo to "vypluje". V mojom prípade, nakoľko boli použité embedované fonty (nie klasické), animácia síce bola pekná, no bez fontu, ktorý by som potreboval. Čo teda ďalej? Ako to riešiť?
CSS3 a jQuery?
Áno. Prvá vec, čo mi napadla bolo CSS3 kôli @font-face. Nakoľko ak idete robiť banner, ktorý má byť hlavne pre mobilné zariadenia, musíte myslieť hlavne na jeho veľkosť. Viem, asi sa pýtate sami seba, či pri použití @font-face sa dá hovoriť o optimalizácii, ale verte či nie, áno, dá. Dôvod? Každý prehliadač si stiahne len ten typ fontu, ktorý potrebuje pre správne renderovanie. (Aspoň by to tak malo byť). A čo rozhodovanie o tom, akú animáciu voliť? Máme dva spôsoby, ako môžeme takýto banner animovať.
Animovať pomocou jQuery .animate()
To bola moja prvá voľba. Samozrejme, že keď som to odovzdal, klient mi to poslal späť aby som opravil HTML a prerobil to na úplnú CSS3 animáciu. Údaje, čo prehliadače, ktoré nepodporujú Javascript?! Trošku som sa zasmial, pretože ak nepodporujú JavaScript, tak CSS3 nevyrieši reštartovanie animácie a dokonca ani prvotné overenie toho, či prehliadač podporuje verziu pre javascript, alebo sa použije CSS3 verzia animácie, ale budiš.
Ak nepoznáte funkciu .animate(), tak si ju trošku osviežme, alebo s o nej čo-to povedzme. Vlastnosti sú nasledovné.
.animate( vlastnosti [, dĺžka travnia] [, animácia] [, dokončenie animácie] )
Pre príklad použitia si môžeme spraviť jeden div - najlepšie taký, čo potom aj využijeme. Volajme ho BANNER -
. Prostredníctvom funkcie animate pridáme vlastnosti a určíme, ako dlho sa animácia má vykonávať.
$('#banner').animate({
width: '468', // nastavíme šírku na 468 px
height: '60', // nastavíme výšku na 60 px
// animácia bude trvať 3 sekundy
} , 3000, function() {
// tu je animácia dokončená...
});
Ako by sme animovali takúto vec pomocou CSS3?
Aby sme si uvedomili, čo sme vôbec robili, tak si povedzme, že ide o tzv. resize elementu. Z toho dôvodu aj nasledovný kód, ktorý si vysvetlíme.
@keyframes resize {
0% {
width: 0;
height: 0;
}
50% {
width: 60px;
height: 468px;
background-color:rgba(255,0,0,0.2);
}
100% {
width: 468px;
height: 60px;
background-color:rgba(255,0,0,0.9);
}
}
#banner {
animation-name: resize;
animation-duration: 1s;
animation-iteration-count: 4;
animation-direction: alternate;
animation-timing-function: ease-in-out;
}
Hneď v úvode máte možnosť vidieť @keyframes resize. Čo nám to hovorí? Áno ak myslíte na určovanie kľúčových snímok. Ako máte možnosť vidieť, nazvali sme celú tú kľúčovaciu animáciu ako "resize". Je to veľmi dôležité vedieť, nakoľko sa na tú animáciu budeme odkazovať pri určení elementu, na ktorý chceme animáciu použiť. Presnejšie hovorím o deklarácii: animation-name: resize;. Ako vidíte, to "resize" môže byť nahradené čímkoľvek, podľa toho, ako si animáciu nazvete.
Ako rozpohybovať texty?
Ako vidíte vo vyššie uvedenom zápise @keyframes, určujú sa tam percentuálne hodnoty. Ide o vyjadrenie pozície animácie. Ak si vezmeme, že určujeme dĺžku animácie v milisekundách, alebo v sekundách, pri animácii trvajúcej 5 sekúnd, je 50% zápis presne 2.5 sekundy. Matematiku zvládneme všetci, takže myslím, že objasňovať ju netreba. Skôr si poďme povedať o pár základných veciach, ktoré už poznáme z iných CSS zápisov. Aby prehliadače vedeli, o čo ide, musíme používať aj zápis typu @-moz-keyframes, @-webkit-... @-ms-... či @-o- (pre operu). Pre reálny príklad si poďme spraviť jednduchú animáciu textu, kde potrebujeme, aby sa text zväčšil a spravil fade-in. Ako by sme to zapísali?
@keyframes text {
0% {
font-size: 20px;
top: 10px;
opacity: 0;
}
15% {
font-size: 26px;
opacity: 1;
top: 6px;
}
75% {
font-size: 26px;
opacity: 1;
top: 6px;
}
100% {
font-size: 20px;
opacity: 0;
top: 10px;
}
}
Ako vidíte, je to opäť len @keyframes bez @-moz- či @-webkit-. Nakoľko natívny spôsob:
@-moz-keyframes text, @-webkit-keyframes text, @keyframes text
NEFUNGUJE, je nutné, aby sa vyššie uvedený zápis zopakoval pre každú entitu. Ako môžete vidieť, zápis v keyframes určuje, že na začiatku bude text s nulovou opacitou, bude mať 20 pixelov. V 15% sa text zväčší na 26 pixelov a zviditeľní sa (opacita 100%). Následne tak bude až do 75%, kedy sa do 100% opäť vráti do pôvodných rozmerov a vlastností ako tomu bolo na začiatku. Aby sme našu animáciu spustili, potrebujeme určiť element, na ktorý bude animácia aplikovaná.
#banner p {
animation-name: text;
animation-duration: 5s;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-timing-function: ease-in-out;
-moz-animation-name: text;
-moz-animation-duration: 5s;
-moz-animation-iteration-count: infinite;
-moz-animation-direction: alternate;
-moz-animation-timing-function: ease-in-out;
-webkit-animation-name: text;
-webkit-animation-duration: 5s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-direction: alternate;
-webkit-animation-timing-function: ease-in-out;
}
Spojme si to dokopy
Súbor na ukážkuPripravil som pre Vás jedno skúšobné html, pomocou ktorého si môžete pozrieť funkčnosť toho, čo je písané v tomto článku.
Programátor, webdesigner a webdeveloper niekoľkých webových projektov. Má za sebou prácu v reklamnej agentúre, médiách a na rôznych pozíciách v oblasti IT.
8 komentárov k článku:
Komentovať môžu iba prihlásení
Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)
Prihlás sa tu, ak už máš profil na Zajtra.sk:
@All: A o to viac si viete predstavit moje nadsenie, ked som musel prerabat inak plynulu animaciu z FLASH-u a aj to len z toho titulu, ze na touch zariadeniach od jablcka flash nefici :)
To je sice peknem,ze v CSS3 sa daju robit pekne animacie, ale iba za predpokladu, ze vsetcia pouzivaju Gecko alebo Webkit. CSS3 je na IE utrpenie....
Ja viem asi prečo to nefunguje lebo po prefixoch -moz, -ms, -o či -webkit by mala nasledovať property bez prefixu, lebo novšie prehliadače už nebudú používať prefix a tak nám box-shadow bude chýbať a františek to ma prave naopak.
nuž, jediný problém je tu zatiaľ podpora takýchto pokročilejších css3 funkcií v realite prehliadačov.
Novinky
6 hod.
Financial Times: Huawei uvažuje o koupi Nokie
Richard Yu, šéf jedné z obchodních sekcí společnosti Huawei, řekl asi toto: „Zvažujeme tyto typy akvizic. V té kombinaci vidím určitou synergii, ale záleží to na vůli Nokie. My jsme takovým myšlenkám otevření.“
6 hod.
Google Glass v akci: Jaké jsou futuristické brýle?
Google Glass na sebe poutají hodně pozornosti, a nutno dodat že zcela po právu. Jedná se o zajímavý technologický doplněk, který má před sebou ještě dlouhou cestu. Přehlížet bychom neměli ani otázku ochrany soukromí.
1 dňom
Oracle a Dell se spojují. Je to i pomsta HP
Novým významným partnerem Oraclu pro x86 servery se nečekaně stal Dell. Larry Ellison v tom vidí jasnou strategii a roli jistě sehrály i dřívější velké spory s HP.
1 dňom
Saudská Arábia zablokovala Viber a pripravuje zákaz pre WhatsApp a Skype
Zablokovanie je podmienené nesplnení požiadaviek, ktoré vyslovil miestny telekomunikačný úrad. Štát vďaka týmto aplikáciám prichádza o finančné prostriedky, ktoré by inak získal z medzinárodných hovorov a SMS správ.
1 dňom
Microsoft poskytuje USA informácie o chybách pred ich opravením
Spoločnosť Microsoft poskytuje americkým tajným službám informácie o bezpečnostných chybách v jej softvéri skôr, ako chyby opraví a teda väčšinou skôr ako o nich verejne informuje.
Staršie novinky »TOP dlhšie
- 01 3 jednoduché kroky ako spraviť responzibilný dizajn webu (4379x)
- 02 Prečo sa chcem naučiť programovať web stránky? (3832x)
- 03 PayPerPost.sk - zarábajte s webom na článkoch (3771x)
- 04 5 užitočných jQuery tipov (3206x)
- 05 Súťaž o návrh Loga (2845x)
- Aj ty môžeš byť najčítanejší. Napíš článok »
TOP tento mesiac
- 01 HTML WebSocket - chat v node.js za 5 minút (1803x)
- 02 Prečo potrebuje programátor psa (1270x)
- 03 Aplikácie na Facebook-u pre obchoďákov (1072x)
- 04 Ingnite Bratislava vol. 3 (771x)
- 05 Nový 13,3” tablet pro Váš domov - Point Of View Mobii 1325 (87x)
- Aj ty môžeš byť najčítanejší. Napíš článok »
Nové články:
- 10.Nový 13,3” tablet pro Váš domov - Point Of View Mobii 1325
jún - 6.Prečo potrebuje programátor psa
jún - 5.ZALMAN FX100 – pasivní chlazení CPU ve tvaru kostky
jún - 1.Aplikácie na Facebook-u pre obchoďákov
jún - 31.Jelly Meeting #20 s Marcelou Liptajovou: Ty ako nová značka na trhu
máj - Viac »
- Aj ty môžeš byť najčítanejší. Napíš článok »
Pekné veci
Pekné veci
Pekné veci
Pekné veci
Posledné komentáre
- su jednoduche, pekne, tak ako šikovný dizajner vie nadizajnovať pekný web, takisto vie š...
- http://www.ambrowse.com/kontakt.php lol, fakt doveryhodna stranka .. ako mi uz pomoze...
- Otazka, ako to niekto robi tak sialene perfektne? Ak sa o design aspon trochu zaujimas m...
- nie som dizajner, rozpravam sa ale s dizajnermi, rozpravam sa s kodermi, obom rozumiem c...
- hmmmm, ok...este niekto?
Kritika
Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!
Reklama
Slovenská IT komunita
Seriály zo Zajtra.sk
· Ako písať blog
· Ako sa stať PHP ninja s Yii Frameworkom
· Aplikácie pre Facebook
· CSS triky
· iOS vývojára príhody a skúsenosti
· Modelovanie webového sídla
· Nauč sa CodeIgniter [HD]
· Nauč sa jQuery [HD]
· Nette PHP framework
· OOP v Javascripte
· Slovenskí iOS developeri
· Yablkov TurboTip [HD]




















poklona...