Antes de alguém fazer confusão com o refrigerante, vamos explicar o que é um sprite em informática.

Um sprite é um objeto gráfico, normalmente uma imagem, que se move numa tela sem deixar rastros, foi muito utilizado nos jogos 2D há um tempo atrás, o pessoal deve estar lembrando do mugen não?

Bom então como isso funciona na web? Todos sabemos que quanto maior o numero de imagens que utilizamos em um site, maior é o número de requisições que um browser deve fazer para exibi-la, certo? Então quando precisamos fazer uma animação, por javascript ou mesmo um simples :hover, em um site que precise de várias imagens, seria interessante que quando a animação começasse já estivessem todas as imagens carregadas, ou poderia pular alguns quadros alterando o efeito desejado. Isso pode ser feito carregando todas as imagens necessárias dentro de um único arquivo de imagem e quando necessário, mudar a posição da imagem para mostrar somente a parte necessária para o usuário.

Como diria um antigo colega “show me the code“!

<ul>
    <li><a class="botao" href="#">Botão 1</a></li>
    <li><a class="botao" href="#">Botão 2</a></li>
    <li><a class="botao" href="#">Botão 3</a></li>
    <li><a class="botao" href="#">Botão 4</a></li>
</ul>

Nosso HTML é bem simples, apenas uma lista de links que pertencem a class .botao para ficar mais fácil definir as regras.

Primeiro vamos ver como deve ficar nossa imagem. Se quisermos um botão de 40px de altura com uma troca a imagem deve ter 80px de altura e obviamente deve conter dois botões.

botoes

Código CSS

*{
    list-style:none;
    font-weight:bold;
    font-size:14px;
    text-decoration:none;
    color:#415FAF;
}
 
.botao{
    background:url(botao.jpg) no-repeat;
    width:200px;
    height:20px;
    display:block;
    text-align:center;
    padding:10px 0;
}
.botao:hover{
    background-position: 0 -40px;
}

Como este é apenas um exemplo, comecei utilizando uma regra para definir as propriedades que me interessavam de um modo bem geral.

Como podem ver das linhas 1 à 7, tiramos os marcadores da lista(linha 2), colocamos o texto em negrito(linha 3), definimos a fonte(linha 4), retiramos o sublinhado padrão do link(linha 5) e definimos a cor do texto(linha 6).

A partir da linha 9 é que nos interessa, definimos a imagem como background na linha 10, e o tamanho do botão nas linhas 11 e 12, como nosso botão é um link, que por padrão tem a propriedade display como inline, deve ser alterado para block para respeitar as as medidas que definimos. Nas linhas 14 e 15 utilizamos para centralizar o texto do botão.

Para fazer nossa mágica utilizaremos o a pseudo-classe :hover, como podemos ver na linha 18, para que quando passarmos o mouse pelo link mudamos o posicionamento do background, para isso utilizamos a propriedade background-postion que move o background no eixo x e y respectivamente.

Segue o link para baixar o exemplo, que também mostra como usar várias imagens ao mesmo tempo.