Přejít k navigační liště

Zdroják » Webdesign » Webdesignérův průvodce po CSS3: animace

Webdesignérův průvodce po CSS3: animace

Články Webdesign

V minulém díle jsme si ukázali, jak udělat náš web krásnější s pomocí CSS3. Dnes nás čekají přechody, transformace a animace. Ty byly ještě nedávno hlavně doménou Flashe a JavaScriptu, nyní přicházejí přímo do CSS. Hlavní tahoun v jejich prosazování a implementováni je Apple (Webkit) a lze si s nimi skutečně vyhrát.

Stejně jako minule vás musím rovnou na úvod upozornit, že ne všechno bude fungovat v Internet Exploreru (včetně IE9). Velká většina nebude fungovat ani ve Firefoxu 3.6. Firefox by měl podporu pro přechody mít od verze 3.7, na CSS animacích se prý pracuje. Jinými slovy: nespoléhejte se, že cokoli z toho bude návštěvníkovi vašeho webu fungovat.

Přechody

Změny na webových stránkách jsou dnes většinou skokové. Odkaz má podtržení, najedu na něj myší a najednou ho nemá. Žádný přechod, který by lahodil oku. CSS3 transitions řeší právě tuto věc.

Transitions si vymyslel Apple do Webkitu a W3C je dlouho do specifikace nechtělo. Někteří lidé říkali, že tohle by měl řešit skriptovací jazyk, že to je pro CSS příliš komplexní. Nakonec ale Apple a Mozilla vytvoření modulu společně prosadili.

Podpora v prohlížečích

Transitions dneska najdeme v Safari , Chrome, Opeře a Firefoxu 3.7+. Internet Explorer se třeba přidá s verzí 10?

Jak fungují

Za pomoci transitions můžeme udělat přechod z jednoho stavu prvku na jiný. Použijeme je tedy hlavně při změnách :hover, :active a :focus.

Každá transition má css vlastnost, kterou animuje. Dále má dobu trvání ( duration) v sekundách. Např. tedy .25s pro 1/4 vteřiny. Také má časování, tedy způsob, jakým se přechod počítá. Například lineární ( linear), pro jednoduchý, postupný přechod. A nakonec může mít transition zpoždění ( delay), tedy dobu, kterou se počká před vykonáním přechodu po aktivaci prvku.

Výsledek by pak mohl vypadat třeba takhle:

a { color: blue; }
a:hover {
    color: red;
    /* OBSOLETE? */ -webkit-transition: color .25s linear; -moz-transition: color .25s linear; -o-transition: color .25s linear;
    transition: color .25s linear;
    }

Tento kód změní během čtvrt sekundy barvu odkazu z modré na červenou.

Co všechno lze nastavit

Transition můžeme nastavit téměř na jakoukoli vlastnost CSS (vypadá to, že výjimkou je box-shadow) a samozřejmě nemusíme animovat jen jednu vlastnost (jako jsme animovali barvu v našem příkladě), ale klidně všechny pomocí klíčkového slova „all“.

Hrát si můžeme také s nastavením stylu přechodu. Kromě linear se nám totiž nabízí hned několik zajímavých možností.

  • ease  – postupné zpomalování
  • ease-in  – zrychlení
  • ease-out  – zpomalení
  • ease-in-out  – nejdřív zrychli a poté zpomal
  • cubic-bezier(x1, y1, x2, y2)  – x a y jsou hodnoty mezi 1 a 0, které tvoří tvar beziérovy křivky.

Odkazy jinam a příklady

Transformace

Chtěli jste někdy nějaký element přiblížit jakoby lupou, otočit o 90°, či prostě jen na svém blogu trošku rozházet fotky, aby to vypadalo fakt parádně? Tak to se vám budou líbit CSS transformace, které všechno tohle přináší.

Podpora v prohlížečích

Transformace jsou na tom s podporou výborně. Kromě Internet Exploreru je podporují všechny zbylé prohlížeče (Firefox, Chrome, Safari, Opera) ve svých stabilních verzích.

Jak fungují

Prvek, kterému dáte tranformation, se nejprve standardně umístí do stránky a poté se na něj aplikuje transformace. Funguje to stejně, jako když aplikujete position:relative;, ani v nejmenším to tedy neovlivní zbytek stránky.

S transformacemi můžete dělat v podstatě čtyři věci:

  • posunout prvek někam jinam o tolik, na osách x a y, kolik uvedete – translate ( transform: translate(100px,50px);  )
  • otočit prvek o libovolný počet stupňů – rotate ( transform: rotate(90deg);  )
  • zvětšit prvek (v násobcích velikosti, tedy např. 2 znamená, že výsledek je 2× větší než originál) – scale ( transform: scale(2);  )
  • zkosit prvek (o kolik stupňů se prvek zkosí od os x a y) – skew ( transform: skew(10deg,10deg);  )

Aby vám tyto věci dneska fungovaly, musíte samozřejmě přidat ty správné vendor prefixy.

Co s tím provádět + příklady

Transformaci můžeme aplikovat na jakýkoli element a samozřejmě ji můžeme aplikovat až, například, po najetí myší. V kombinaci s transitions se váš web tak může proměnit z průměrného na okouzlující.

Odkazy jinam

Animace

A nakonec přichází to nejlepší – animace.

Podpora v prohlížečích.

Zatím podporují pouze Chrome a Safari. Mozilla prý podporu chystá.

Jak fungují

Trošku složitěji. Ale ne zas tak moc. Pojďme na to v krocích.

  1. Pojmenujme si animaci: -webkit-animation-name: animace;
  2. Nastavme dobu trvání: -webkit-animation-duration: 2s;
  3. Nastavme kolikrát se má opakovat: -webkit-animation-iteration-count: infinite;
  4. Nastavme jak se má počítat (funguje stejně jako u transitions):  -webkit-animation-timing-function: linear;
  5. Definujme samotnou animaci.
@-webkit-keyframes animace {
    from {
        -webkit-transform:rotate(0deg);
    }
    to {
        -webkit-transform:rotate(360deg);
    }
}

A základ bychom měli. Hrát si s tím ovšem můžeme mnohem více, například nastavovat klíčové momenty animace v % doby trvání:

@-webkit-keyframes animace  {
    20% {
        -webkit-transform:rotate(20deg);
    }
    80% {
        -webkit-transform:rotate(90deg);
    }
}

Samozřejmě těchto klíčových momentů můžeme nastavit kolik chceme. Možnosti jsou nekonečné.

Odkazy jinam a na příklady

Závěrem

Půjčím si větu od Honzy Korbela – To je sakra paráda, co? A to jste ještě neviděli 3D transformace… (Ale ty už si zájemci jistě nastudují sami, popř. se k nim v budoucnu vrátíme.)

Příště přijdou Media-queries a lehce se dotkneme Responsive Web Designu.

Komentáře

Subscribe
Upozornit na
guest
9 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
kerth

ma este nejaky zmysel zdielat informacie na sieti alebo to budu len farbicky a poskakujuce somarinky?

mikiqex

Tyto efekty zcela jistě najdou uplatnění v nových webových hrách a působivých webových prezentacích. Doufám, že se nedostanou do rukou blogískařům a webdesignérům bez grafického cítění, abychom se nevrátili o takových 10 let zpátky, kdy třeba frčel tag MARQUEE…

juraj

Najvtipnejšie je na tom to, že W3C pracuje na tzv. Marquee module pre CSS3. Môžeš hádať, čoho sa týka.
Osobne sa mi nezdajú tieto vlastnosti vôbec užitočné a konzorcium a vývojári prehliadačov by sa mali sústrediť na iné časti návrhu CSS3.

Martin Michálek

Proč? Vy blogísky čtete, že by vám tam vadily? ;-)

(To bychom za sebou měli laciný úvod a teď vážně…) Naopak doufám, že tyhle malé parádičky s velkým efektem půjdou dělat co nejjednoduššími prostředky a že šanci dělat si takhle radost dostane co nejširší skupina lidí.

Vždyť pro koho ty technologie vymýšlíme nebo implementujeme? Pro vývojáře nebo pro lidi na druhém konci drátu?

Ať si s tím pak každý naloží jak chce. Vždyť svoboda je jeden z důvodů, proč všichni web tak máme rádi, nebo ne? :-)

Luboš

Všechny tyto přechody a animace mi velmi vadí, zatím to řeší noscript apod. I na desktopu mám vypnuté efekty přechodu – zdržuje to.

MCZ

Css transitions šikovně používá třeba neowin.net (zkuste třeba v Chrome). Není to nijak přehnané a ta postupná změna barvy odkazů po najetí web hezky oživuje. Pokud to budou designéři takhle střídmě využívat, pak nevidím důvod být proti (byť to samozřejmě není ta nejdůležitější část CSS3).

Jinak spíše než k pseudoclassám hover apod. doporučuji dávat ono -webkit-transition … rovnou (např.) k selectoru „a“; Vámi uvedený příklad má totiž tu nevýhodu, že (přinejmenším v tom webkitu) pak dochází k tomu, že odkaz sice hezky animuje po najetí, ale při mouseout už změní barvu okamžitě, jelikož se transition uplatní skutečně pouze po najetí kurzorem na element, ovšem už ne po jeho opuštění.

Jan Sladek

Diky za poznamku k prikladu, mate pravdu. Pro ucely clanku mi prislo jasnejsi to dat k :hover a na tento drobny nedostatek jsem nepomyslel. :)

vks

>>> Kromě Internet Exploreru je podporují všechny zbylé prohlížeče (Firefox, Chrome, Safari, Opera) ve svých stabilních verzích.

už mě unavuje, že někdo dělá něco co není globálně kompatibilní. IE je ve všem stále pozadu, a má to jediný následek: brzdění vyvoje kuli tomu, že nějací kreténi používají explorer.

S každou verzí flashe mě prohlížeč šikanuje, že si prostě musím updatovat.
proč nikdo nenutí uživatele starých explorerů aby aktualizovali?
prostě zamezit přístup na Facebook, když je prohlížeč starý == to posune vývoj, aspoň na úroveň standardů z roku 2003… nějaké XHTML a CSS3

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.