10 Prosinec

CSS Sprites – sloučení více obrázků v jeden

Říkáte si k čemu to může být takové „sloučení více obrázků v jeden“, ale např. facebook, youtube, amazon a určitě spousta dalších moc dobře ví. Jde v podstatě o to, že více obrázků, které vkládáme do stránky přes CSS (background:ur(xxx.gif)), můžeme sloučit do jednoho společného obrázku, a tím ulehčit stránce jednak datově ale i počtem samotných dotazů na jednotlivé obrázky na server.

Příklady sloučení

Jak už jsem zmiňoval výše, je pár známých webů, které tento systém používají:
facebook.com
youtube.com
amazon.com

jak vidíte, tak všechny obrázky (kromě těch, které používají jako opakování buď repeat-x nebo repeat-y, zálaží na pozicování obrázků), jsou v jednom souborů, tím se docílí to, že se načte jeden obrázek, ve kterém jsou všechny obrázky, které se používají na této stránce.
Touto úpravou mají dohromady menší velikost, než kdyby byl každý obrázek zvlášť a tím pádem je na server pouze jeden dotaz.

Ale jeden z největších důvodů, kvůli kterému tuto techniku začínám postupně využívat a kterou Vám dnes ukážu, jsou odkazy, tlačítka nebo prostě prvky, které se po najetí změní v jiný obrázek, pokud neuděláte to, že je dáte dohromady v jeden společný, tak se při najetí stane to, že obrázek „přeblikne“, jelikož se načítá druhý, který má vytoužený efekt a uživatel tím pozná, že najel na prvek, který něco po kliknutí udělá.

Způsob jakým tento problém řeším já je na stránce www.nafukovacilode.cz.
Takto vypadá obrázek a takto zdrojový kod:

a:link,
a:visited,
a:hover {
width:267px;
height:66px;
display:block;
text-decoration:none;
position:absolute;
right:35px;
top:37px;
background: url(../img/homePageAction-more-bg.jpg) top left no-repeat;
text-indent:-9999px;
}
a:hover {
background: url(../img/homePageAction-more-bg.jpg) bottom left no-repeat;
}

Tímto se zaručí to, že po přejetí nad odkazem Vám odkaz neproblikne tím, jak se druhý obrázek dočítá.
Doufám, že jsem aspoň pár kodérům ukázal novou techniku, která jim pomůže zdokonalit kód, pokud by jste někdo měl nějaký dotaz, nebo věděl lepší řešení tak komentáře jsou Vám otevřené :)

P.s: Až vyzkouším jeden nástroj, který by toto všechno měl ulehčit, tak se o něj určitě rád podělím ;)

Přidat na facebook.com Přidat na twitter.com Přidat na delicious.com Přidat na digg.com Přidat na stumbleupon.com Přidat na reddit.com
4 komentářů
  1. Prosinec 11, 2009 v 21:58 Re4DeR napsal:

    Jo jo, šikovné. Ještě je dobrá Náhrada textu obrázkem. :)

  2. Prosinec 13, 2009 v 15:49 McQuack napsal:

    Tenhle trik znám ještě z doby kdy jsem dělal v Game Makeru, kdy se do jednoho obrázku vložilo třeba 50 různých menších spritů a pak se to v programu načítalo odděleně (“rozstřihalo“). Že to jde v CSS jsem netušil, a neplánuji to používat.

  3. Prosinec 14, 2009 v 17:40 R4ms3S napsal:

    To McQuack: myslím si, že to má hlavně v obrázkovém menu své opodstatnění…

  4. Leden 31, 2010 v 20:25 Petr Komárek napsal:

    Něco podobného jsem dělal zde – http://allpro.cz/images/menu/full.gif. To jak to má například řešeny Facebook nebo Amazon je už větší výzva.

    Každopádně to má i své mínusy tato technika. Například v updatování obrázků a složitém vypočítávání. Ale už i na toto jsou dostupné nějaké nástroje.



Přidat komentář