Quinta-feira, 26 de abril de 2007 às 10h00

CSS Sprite

Faltam -1 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.

O que é Sprite?

Antes que façam a piadinha [rs], Sprite não é a marca de refrigerante e sim "um conjunto de dados que definem determinado objeto ou personagem num jogo. Para uma pessoa, por exemplo, podemos ter um sprite que contenha as posições vertical e horizontal dela no mundo, a direção para onde ela está virada e os bitmaps que podem representá-la durante o jogo".

E o CSS Sprite?

CSS Sprite é uma técnica que usa um Sprite para fazer uma "troca de imagem", ou seja, o deslocamento de posição do mapa de imagem que irá fazer no caso a "animação". Essa técnica permite que utilizemos várias imagens em uma só, assim economizamos número de requisições no servidor e quantidade de imagens.

Como desenvolver essa técnica?

Usarei aqui um exemplo de como aplicar CSS Sprite em um menu, onde ao passar o mouse ele trocará a imagem de fundo. Usarei a imagem e somente essa imagem abaixo para desenvolvimento do tutorial.

O menu inicialmente será em preto e branco, conforme abaixo, e ao passar o mouse ele ficará colorido. Veja o exemplo:

Ao passar o mouse sobre (hover), a opção mudará a cor de fundo:

Depois da produção das imagens, vamos ao HTML!

Cada link tem sua ID, ou seja, cada link terá seu fundo individual, por isso utilizo ID ao invés de classe.

<div id="top_menu">
<ul>
	<li><a href="#" id="opt1">Option 1</a></li>
	<li><a href="#" id="opt2">Option 2</a></li>
	<li><a href="#" id="opt3">Option 3</a></li>
	<li><a href="#" id="opt4">Option 4</a></li>
</ul>
</div>

Depois de construído o menu em HTML, iremos estilizá-lo com CSS.

Enfim, o CSS:

Aqui está o código mais importante do nosso CSS.

#top_menu ul li a{
    background-image:url(bg_sprite.gif);
    background-repeat:no-repeat;
    background-position:right;
    (...)
}   
#top_menu ul li a:hover#opt1{ background-position:-3px 6px; }
#top_menu ul li a:hover#opt2{ background-position:-110px 6px; }
#top_menu ul li a:hover#opt3{ background-position:-217px 6px; }
#top_menu ul li a:hover#opt4{ background-position:-320px 6px; }

Explicando:

#top_menu ul li a: Ele carrega a imagem bg_sprite.gif como fundo (background) uma única vez, não repetindo a imagem e posicionando a direita, local onde está a cor de fundo do nosso menu, como está na imagem menu pronto.

Agora explicarei somente um estilo, que é equivalente aos posteriores, pois alteramos somente a posição X (horizontal) e Y (vertical) da imagem, dando a sensação que a mesma está sendo trocado.

#top_menu ul li a:hover#opt1: É alterado somente a posição do background ao mover o mouse sobre o link, uma vez que a imagem já está carregada pelo estilo #top_menu ul li a.

O primeiro valor do background é equivalente a posição X (horizontal) e o segundo Y (vertical);

Conclusão:

O CSS Sprite pode ser usado em várias ocasiões, a exemplo de vários ícones na página. Se você tem 10 ícones, você pode produzir somente uma imagem com os 10 ícones e posicioná-las como background a sua necessidade.

Notas:

O exemplo desse artigo está disponível aqui.

O arquivo completo pode ser baixado nesse aqui.

Abraço, e até a próxima!

13 comentários

 Éder da Silva
26/04/2007 13h18

Parabens Eder

Excelente materia meu amigo,isso ira ajudar muitas pessoas pode ter certeza disso. Valewww

 Vinicius Vicente
26/04/2007 13h18

É...

É, isso é algo a pensar... até que é bom o artigo... valeu pela idéia!

 marco moura
26/04/2007 13h33

Mui bom

Em um artigo do YAHOO sobre performa-se, é dito q diminuir o numero de requisições na página tem um grande impacto na redução do tempo de resposta para o usuário

CSS sprite na veia, nada de pensar, vamos usar já

 Edimar Ramos
26/04/2007 14h29

Show de bola....

show de bola... ficou bacana o resultado

 Rafael Brugnollo
27/04/2007 07h35

Muito Bom

Não conhecia a técnica... obrigado pelo artigo!!! me ensinou muito!

 Igor Escobar
27/04/2007 08h35

Hun..

Legal a idéia desta artigo amigo. Original, parabens ;)

 Davi Lima
27/04/2007 11h20

Title / Alt

Tem como eu colocar ALTs ou TITLEs para cada botão da sprite?

 Eder Prado
27/04/2007 12h32

Obrigado pelos comentários

Davi Lima, respondendo sua pergunta. Não é possível colocar alt e title na imagens, uma vez que elas são carregadas como background.

O que você pode fazer é colocar title na tag <a>, por exemplo, <a title="Imasters" hreh="...

Abraço!

 Rafael 001
28/04/2007 00h13

Ótimo

Realmente é artigos assim que valem a pena ler... Essa técnica não conhecia, apesar de simples não sabia que com o "background-position" podiamos usar -100px; -20px, etc...

Valeuuuuu!!!

 Neucimar Flávio Vieira
02/05/2007 01h29

Ótima, e intereçante

Horra, parabens ótima matéria mesmo.

 Gustavo Buarque Costa Cardoso
04/05/2007 09h22

Não entendi uma coisa.

Porque de uma imagem em preto branco, se somente usa a imagem colorida.

 Eder Prado
04/05/2007 09h31

Gustavo Buarque

Infelizmente não entendi sua pergunta!

 Rodrigo Luiz Genz
23/12/2007 03h16

Interessante

Nossa nunca tive tal pensamento sobre efeito de menus quanto a esse, mas confesso ter me confundido quanto a escolha do artigo para a leitura ^^ pensei que aqui estaria sendo postado sobre os spray.
Mas terminei satisfeito, pois tal conhecimento não tinha ainda .. vlw continue assim ;D

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Eder Prado é webdesigner na FJPII (Canção Nova), estudante em Licenciatura da Computação na FATEA de Lorena, e tem interesses em programas de educação a distância, coordenação de projetos e padrões de desenvolvimento.
Outros artigos do mesmo autor:

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.