Torsdag, d. 11. marts, 2010 - 8 kommentarer

Fordele, ulemper og gode ressourcer til CSS Sprites

Jeg har tidligere snakket omkring CSS Sprites i mine indlæg omkring en struktureret tilgang til HTML og CSS. Siden da har jeg fået lidt mere indsigt i brugen af netop CSS Sprites. Det er disse erfaringer, jeg vil dele ud af idag. De er faringer jeg har lært er hovedsageligt sket her på min egen hjemmeside, derfor vil i også komme til at se, hvordan jeg har bygget mine CSS Sprites op.

Da det kan være lidt tricky at arbejde med CSS Sprites, så håber jeg dog også på, at læserne måske har yderligere erfaringer at byde ind med, hvis de tør? ;)

Indholdsfortegnelse

  1. Fordele ved CSS Sprites
  2. Ulemper ved CSS Sprites
  3. Se mine CSS Sprites
  4. Gode ressourcer
  5. Andre om CSS Sprites
  6. Konklusion
  7. Sig din mening om CSS Sprites

1. Fordele ved CSS Sprites

Der er gode fordele ved at benytte af sig af CSS Sprites. De kan være med til at gøre loadtiden på din hjemmesiden væsentlig hurtigere, fordi der ikke skal laves en lang række kald til serveren. Du synes måske ikke, det betyder noget, hvis der skal laves 50 kald for at hente 50 små billeder, men brugeren synes måske noget helt andet. Forestil dig en hjemmeside, hvor besøgstallet er ganske højt, og disse små billeder hele tiden bliver efterspurgt – hvad tror du så det betyder? Desmere vil det faktisk også gå hurtigere for brugen, hvis de skal hente få store filer frem for mange små filer.

Personligt finder jeg det bl.a. en fordel at benytte CSS Sprites til knapper. Forestil dig det scenarie, at du skal ændrer skrifttypen på 30 forskellige knapper på en hjemmeside. Forestil dig efterfølgende at skulle åbne 30 filer i Photoshop. Eller det kan også være, at du har været lidt på forkant og gemt alle knapperne i en fil, men hvad så, når du skal gemme alle 30 knapper? Jo vidst, så kan du lave en batch, men ville det ikke være sjovere bare at gemme alle knapper på en gang?

Jeg synes også det kan være en fordel, at kunne opgradere/ændrer i flere grafikelementer på engang blot ved at åbne en fil. Som i eksemplet ovenfor, så behøver du nemlig ikke at skulle gemme adskillige filer. Jeg bruger eksempelvis CSS Sprites her på min egen hjemmeside. De bliver bl.a. brugt til forskellige overskrifter, hvilket jeg forleden valgte at ændrer lidt på. Det var faktisk ret nemt, fordi det hele var samlet i en fil. Samtidig kunne jeg uploade et billede og efterfølgende trykke CTRL-F5 – og vupti – alle disse overskrifter var blevet ændret.

CSS Sprites ses også ofte anvendt til hover-effekter, hvor du vil skifte udseende på et menupunkt, et ikon eller noget helt tredje. Her fungerer de også ganske glimrende, fordi et nyt baggrundsbillede ikke skal downloades ved hover, men allerede på forhånd er blevet downloadet. Det betyder, at hovereffekt vil være smertefri og harmonisk. Netop denne teknik benytter jeg mig faktisk rigtig ofte af – ikke kun her på min egen hjemmeside. Teknikken er eksempelvis brugt på Apple’s hjemmeside til hovednavigationen, hvor det samlede baggrundsbillede ser således ud. Dette er selvfølgelig ikke optimalt, hvis menupunkterne ofte skal opdateres og justeres, men det er en helt anden snak.

2. Ulemper

Ligesom vi havde ovenfor nævnte scenarie med knapperne, så kan det modsat være en ulempe. Hvad hvis du derimod skal ændre farven på alle knapperne. Pludseligt, kan det hele blive lidt mere omsonst. Heldigvis er du skarp i Photoshop, og kender alle de smarte teknikker – eller du er måske ikke en af dem?

En anden ulempe er også, at du ikke uden videre kan samle alle dine baggrundsbilleder i en fil. Du er nødt til at tage højde for, om baggrundsbillederne skal gentages. Det kunne eksempelvis være langs Y- eller X-aksen, hvilket sker ganske ofte. Her kan du dog vælge at samle de billeder, der skal gentages i hver sin fil. Dette har jeg selv gjort en indsats for  at praktisere.

Desmere skal du også overveje kvaliteten af dine baggrundsbilleder. Hvis du har mange baggrundsbilleder med mange detaljer, så kan du eksempelvis ikke benytter dig af GIF, da den sammenlagte fil for det første er begrænset til 256 farver, og for det andet betyder det også, at billedet vil komme til at fylde ekstra meget, da GIF håndterer pixels enkeltvis. Du kan også overveje PNG, men derved kan du også havne med store filer. Derfor kan det godt være et ekstra stort arbejde, men du er jo alligevel vant til at overveje kvaliteten af baggrundsbillederne, hvis de var enkeltvis.

Udover at skulle kæmpe med JPG, GIF eller PNG, så kan du også rende ind i et problem, hvis pladsen i dit samlede baggrundsbilleder pludselig løber op. Specielt, hvis du ikke har lavet din CSS bedst muligt, så kan en udvidelse betyde, at du skal opgradere din CSS adskillige steder. Derfor undgå så vidt muligt at bruge “bottom” og “top”, når du positionerer dine baggrundsbilleder.

Du kan også rende ind i et problem, hvis du har små eller større grafikelementer, der skal benyttes på eksempelvis et link i en menustruktur. Hvis vi tager udgangspunkt i min footer, hvor jeg har nogle små ikoner under spalten omkring mig selv. Disse ikoner er placeret i min samlede CSS Sprite. Men linkene strækker sig længere end ikonet, så man skal huske at indregne det, når man sætter grafikelementerne op i sin CSS Sprite. Hvis ikke man husker dette, så vil du snildt kunne se brudstrykker af andre grafikelementer, og det er jo næppe din hensigt. Nu lykkedes det mig dog at håndtere denne situation problemfrit, men det var lidt en anden sag med mine gåseøjn i spalten med mine Tweets, men det lykkedes dog.

3. Mine CSS Sprites

Du vil nok straks bemærke, at mit sprite for alle grafikelementerne i GIF kan virke rodet. Ganske enkelt, så kan det samlede baggrundsbillede nemt blive rodet, specielt når du skal tage højde for nogle af ulemperne nævnt ovenfor. I mit tilfælde er det “heldigt”, at jeg ikke benytter mig af så mange farve, hvilket kunne have kompliceret min brug af CSS Sprites.

Jeg vil dog råde dig til at holde bedst mulig orden i dine sprites, og specielt i dine Photoshop-filer. Her vil jeg henvise til mit blogindlæg omkring god skik i Photoshop. Dette er ikke noget, du kun skal gøre for din egen skyld, men også dine kollegaer eller andre, der måtte komme ind over et givent projekt. Tænk fremad, som de vidst nok har sagt i en reklame fra Nykredit.

4. Gode resourcer

Jeg har samlet en række ressourcer, der kan hjælpe dig i dit arbejde med CSS Sprites – specielt hvis du ikke nødvendigvis magte dem i Photoshop, Fireworks eller hvilket stykke software du end måtte benytte.

Selv har jeg ikke benyttet mig af nogle tilgængelig services ude på nettet, men valgt den hårde fremgangsmåde. Om du vil benytte den ene eller anden fremgangsmåde, er op til dig selv, men tror helt sikkert den hårde vej, giver mest erfaring og indsigt. For ikke at snakke om forståelse og indsigt i formaterne GIF, PNG og JPG.

5. Andre omkring CSS Sprites

Ganske enkelt munder dette blogindlæg ud i mine egne erfaringer med CSS Sprites, men internettet byder dog også på en lang række artikler og blogindlæg, der kan være din tid værd. Jeg har samlet de bedste, som jeg er stødt på:

Alle disse artikler omkring CSS Sprites nævner mange forskellige ting, også ting jeg ikke har været inde på. Mit blogindlæg tager som nævnt udelukkende udgangspunkt i mine egne erfaringer. Uanset hvad, så bør du gennemlæse ovenforstående artikler, da de giver endnu mere indsigt.

6. Konklusion

Fordelene og ulemperne afhænger uden tvivl af, hvor stor en hjemmeside, du beskæftigere dig med. Om den pågældende hjemmeside har mange besøgende eller ej. Om den har mange baggrundsbilleder eller ej. Det kræver uden tvivl ekstra tid at benytte sig af CSS Sprites, så derfor er det ikke sikkert at budgettet tillader det på enhver side, du beskæftigere dig med. Samtidig, hvis det er en simpel og billig hjemmeside, kan man godt vurdere, at CSS Sprites ikke er nødvendige at bruge tid på.

Min anbefaling er, at du skal overveje hvilke projekter, hvorpå du vil bruge tid på CSS Sprites. Omvendt synes jeg også, at du skal bruge noget tid på at få opbygget solide rutiner. Som det fremgår af både fordele og ulemper, så er det ikke nødvendigvis nogen nem opgave.

Og selvom mine ulemper umiddelbart overskygger mine fordele, så skal man aldrig undervurderer et område som loadtid. Som bruger af en hjemmeside, så ønsker man ganske enkelt, at det går stærkt. Man ønsker ganske enkelt en behageligt oplevelse, hvilket gode loadtid er med til at underbygge.

Ganske enkelt, så handler det i høj grad om at danne sig nogle rigtig gode rutiner, hvilke også kan være med til at nedsætte den tid, du bruger på dine CSS Sprites fremover.

Kom med din mening omkring CSS Sprites – for eller imod?

Skriv en kommentar

Relaterede blogindlæg

  1. Sådan arbejder du struktureret med CSS og HTML – del 2
  1. Martin Nielsen - På Twitter

    God artikel om fordele og ulemper, dækker emnerne rigtigt godt, dog fra mit synspunkt lidt ærgerligt du ikke kommer med css eksempler på hvordan sprites så bruges – tror det er her mange står af, men så linker du jo så heldigvis til en god håndfuld ressourcer :-)

    En anden ting, bør man ikke undgå så meget whitespace som overhovedet muligt i sine sprites? det giver vel et par ekstra bytes – tænker fx på “Sprite for alle enkeltstående grafikelementer i GIF” hvor det ser ud til at der er en del spildplads.
    .-= Seneste blogindlæg: Google Analytics i DIBS Flexwin – Spor dine brugere igennem DIBS =-.

  2. Michael Østergaard - På Twitter

    @Martin – Du har fuldstændig ret. Har slet ikke haft i tankerne, hvordan de skulle anvendes, men kunne udvide blogindlægget her i weekenden :) Kom efterfølgende også i tanke om, at jeg ikke skriver meget om, hvad CSS Sprites præcist er, hvilket jeg måske også udvide med henover weekenden – bare lige et par sætninger.

    Men jo, vil også mene, man bør undgå så meget “white space” som muligt. LIge her har jeg ikke været alt for god selv, hvilket skyldes mangel på gode rutiner. Dog giver “white space” ikke mange ekstra bits eller bytes, når man bruger GIF.

    Måske jeg kommer med en opfølgning engang, når jeg har fået nogle rigtig gode rutiner – ligesom med HTML og CSS ;)

  3. Niels Gamborg

    Endnu et fremragende indlæg, Michael. Grundigt og velovervejet, og god formidling af dine personlige erfaringer. Det har været super spændende at følge med efter du er begyndt at blogge igen. :)

    Jeg har også flittigt linket videre til dine seneste indlæg ovre på multimedieforum.dk. De rammer 100% ind i vores målgruppe.

    Håber du følger Martins opfordring og laver en opfølgning. Men der er vist rigeligt stof til et helt nyt indlæg, fremfor redigere det ind i det her indlæg. Det vil også være bedre for både læsevenligheden og søgeord.

  4. Michael Østergaard - På Twitter

    @Niels – Tak for din kommentar, den sætter jeg rigtig stor pris på :) Det er også super godt at være tilbage, og meget motiverende, at mit indhold falder i god jord.

    Jeg burde egentlig begynde at blive mere aktiv inde på forummet. Indtil videre har jeg kun oprettet et spørgsmål eller to.

    Og jeg tror du har ret, skriver et helt nyt indlæg (her i weekenden) – så bare glæd jer ;)

  5. Ulrik Hvide

    Godt indlæg, men det største og eneste problem med CSS sprites er efter min mening at det kræver mere CPU og memory af din bruger, hvilket kan give problemer på Iphones og andre mobile enheder hvor CPU og ram er begrænset. Kan dog stadig kun anbefale at man bruger sprites.

    Ulrik Hvide
    Blog om websites, teknologi og startups

  6. Michael Østergaard - På Twitter

    Hej Ulrik, og velkommen til :)

    CPU-kraft har jeg faktisk ikke haft skænket en tanke, men det er selvfølgelig relevant i forhold til mobile enheder. Her mener jeg dog, at disse skal have et særkelt stylesheet. Man har alligevel større fokus på selve indholdet og derfor skåret hæftigt ned i udsmykningen – ganske forståeligt.

    Ps: Håber at kunne skrive om det at lave webdesigns til mobile enheder i en nær fremtid ;)