Michał Środek

Mój osobisty blog

Witaj na srodek.info

Jest to blog poświęcony nowoczelnym technologiom ułatwiającym tworzenie aplikacji internetowych. Znajdziesz tutaj porady na temat CSS3, JavaScript, designu, web-usability, standardów W3C.

Cześć! Nazywam się Michał Środek. Z zawodu programista php, z zamiłowania gitarzysta oraz fanatyk GNU/Linuksa(openSUSE® w laptopie). W branży aplikacji internetowych od 9 lat. Prywatnie bez dzieci i kota.

Pracuję wciąż nad własnym elastycznym i wydajnym frameworkiem MVC, kilkoma portalami internetowymi oraz mniejszymi bibliotekami php. Czekam na wasze opinie, zgłoszenia błędów oraz pomysły na dalszy rozwój.

Ta część strony jest w trakcie budowy a moje prace tymczasowo niedostępne.

W przypadku pytań, ofert pracy oraz ciekawych pomysłów proszę się ze mną kontaktować. Możesz mnie znaleźć i wysłać PW na php.pl(SHiP), jamendo.com(michalsrodek), goldenLine.pl, facebook.com lub nk.pl

18 Maj 2010

Użycie sprite’ów w CSS

Filed under: CSS — Michał Środek @ 18:49

Pod­czas two­rze­nia ani­ma­cji do mojej gry, nie zawsze będę uży­wał kształ­tów gene­ro­wa­nych przez Java­Script. Dobrze byłoby cza­sami stwo­rzyć jakąś bar­dziej zaawan­so­waną ani­ma­cję w opar­ciu o gra­fiki rastrowe. W tym celu używa się tzw. Sprite’ów, czyli pli­ków z poszcze­gól­nymi klat­kami ani­ma­cji umiesz­czo­nymi obok sie­bie. Zanim jed­nak przej­dziemy do dal­szego pisa­nia gry, chciał­bym przed­sta­wić jak w pro­sty spo­sób użyć sprite’ów do opty­ma­li­za­cji stron internetowych.

Kla­sycz­nym przy­kła­dem jest menu oparte o gra­fikę. Zawsze jest pro­blem ze zda­rze­niem naje­cha­nia myszki. Pod­czas pierw­szego naje­cha­nia gra­fika musi się zała­do­wać co powo­duje opóź­nie­nie zmiany tła.

Przy­kład

Pro­gra­mi­ści róż­nie sobie z tym radzą, czę­sto w bar­dzo dziwny sposób(np. two­rząc pre­lo­adery w Java­Script). Roz­wią­za­nie jest dużo, dużo prostsze.

Two­rzymy Sprite

Pierw­szym kro­kiem jest stwo­rze­nie gra­fiki zawie­ra­ją­cej wszyst­kie elementy.

Zamiast ope­ro­wać na kilku pli­kach mody­fi­ku­jemy poło­że­nie tła.

#menu li{
    background: #491312 url('images/menu.png');
}
 
#menu li:hover{
    background: #820403 url('images/menu.png');
    background-position:0px 35px;
}
 
#menu li.active{
    background: #261f1f url('images/menu.png');
    background-position:200px 0px;
}
 
#menu li.active:hover{
    background: #000 url('images/menu.png');
    background-position:200px 35px;
}

Zobacz efekt

Poza widocz­nym gołem okien uspraw­nie­niem menu, dodat­kowo odcią­ży­li­śmy ser­wer. Pierw­sza wer­sja strony gene­ro­wała aż 4 zapy­ta­nia do ser­wera, druga tylko jedno. W pro­stych pro­jek­tach jest to mało ważne, lecz w przy­padku np. google.com jest to ogromny wyciek trans­feru. Spraw­dza­li­ście kie­dyś kod html google.com i ilość odwo­łań strony głów­nej do oddziel­nych pli­ków? Gra­fika w google.com jest upchana do 2 pli­ków. Pierw­szym jest logo, dru­gim zestaw ikon przy­ci­sków itp. Wygląda to tak.

W jakich sytu­acjach uży­wać sprite’ów? Zde­cy­do­wa­nie gdy mamy do czy­nie­nia z iko­nami oraz drob­nymi ele­men­tami wyglądu strony. Nie ma sensu łączyć dużych gra­fik lub zdjęć.

Dodaj arty­kuł do:

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Gwar
  • Reddit
  • Technorati
  • Twitter
  • Wykop

Komentarzy: 9 »

  1. Skoro już mowa o opty­ma­li­za­cji to zamiast napisać:

    back­gro­und: #000 url(‚images/menu.png’);
    background-position:200px 35px;

    można skró­cić do:

    back­gro­und: #000 url(‚images/menu.png’) 200px 35px;

    Pozdra­wiam :)

    Komentarz by kilas — 18 maja 2010, 20:34

  2. Dzię­kuję za wer­sję zop­ty­ma­li­zo­waną. Moim celem było uka­za­nie background-position ponie­waż chyba nie­wielu o nim w ogóle słyszało.

    Pozdra­wiam :)

    Komentarz by Michał Środek — 18 maja 2010, 20:51

  3. W ogóle dużo osób nie wie, że w tle można usta­wić coś po za gra­fiką lub kolo­rem ;)
    I tak przy oka­zji jak piszesz 0px, 0em nie musi poda­wać jed­nostki wystar­czy np. background-position: 0 35px; ;)

    Komentarz by Maciej Wiczołek — 18 maja 2010, 21:47

  4. bar­dzo fajny arty­kul. troszke sie o sprite’ach dowie­dzia­lem i fajna sprawa. bede musial wyprobowac.

    Komentarz by tomek tomkowy — 23 maja 2010, 14:12

  5. Od zawsze iry­to­wało mnie cze­ka­nie na zała­do­wa­nie się :hovera :D

    Komentarz by Oskar Wójcicki — 27 maja 2010, 22:17

  6. CSS spri­tes to nie tylko roz­pra­wie­nie się z :hover (co czę­sto jest męczące jak menu jest obraz­kowe i znika po naje­cha­niu kur­so­rem), ale także reduk­cja żądań http, ogra­ni­cze­nie wiel­ko­ści gra­fik, szyb­sze łado­wa­nie się strony i kilka innych ;)

    Komentarz by Vokiel — 6 lipca 2010, 13:44

  7. @Vokiel: przed­ostatni aka­pit arty­kułu :) . :hover jest tutaj zapre­zen­to­wany jako przy­kład prak­tycz­nego uży­cia gdzie gołym okiem(dosłownie) widać róż­nicę w dzia­ła­niu strony.

    Komentarz by Michał Środek — 6 lipca 2010, 15:01

  8. Bar­dzo fajny arty­kuł, prze­czy­ta­łem go u Cie­bie już kie­dyś i od tam­tego czasu korzy­stam ze sprite-ów jak najczęściej.

    Teraz przy­pad­kowo wpa­dłem na ten arty­kuł po raz ponow­nie, to napi­sał komen­tarz :)

    Komentarz by haz — 4 sierpnia 2010, 19:06

  9. Fajny arty­kuł, dotych­czas nie wie­dzia­łem o moż­li­wo­ści usta­wie­nia tła poza ele­ment, albo wie­dzia­łem, jed­nak nie myśla­łem, aby tak to wyko­rzy­stać ;)

    Komentarz by godlark — 21 sierpnia 2010, 15:53

Kanał RSS z komentarzami do tego wpisu. TrackBack URL

Dodaj komentarz