Back

Construa e aplique cursores personalizados usando CSS e imagens

Construa e aplique cursores personalizados usando CSS e imagens

Cursores personalizados permitem adaptar a experiência do usuário com indicações visuais que combinam com sua marca ou objetivos criativos. Seja um ícone desenhado à mão, um ponteiro estilo jogo ou apenas uma variação divertida da seta padrão, criar um cursor personalizado com CSS é mais fácil do que parece. Este guia mostra como fazer isso passo a passo.

Principais Pontos

  • Aprenda a aplicar cursores integrados e cursores de imagem personalizados
  • Entenda o suporte do navegador, formatos de arquivo e dimensionamento
  • Evite problemas comuns com fallback e usabilidade

Sintaxe básica da propriedade CSS cursor

O CSS fornece uma variedade de tipos de cursores integrados. Veja como usá-los:

.default {
  cursor: default;
}
.pointer {
  cursor: pointer;
}
.text {
  cursor: text;
}
.help {
  cursor: help;
}
.progress {
  cursor: progress;
}

Essas opções integradas cobrem interações padrão. Mas para ir além, você pode usar sua própria imagem.

Criando um cursor personalizado a partir de uma imagem

Para usar uma imagem como cursor, você pode passar uma URL para a propriedade cursor.

Exemplo:

.custom-cursor {
  cursor: url('cursor.png') 4 4, auto;
}
  • url('cursor.png') é sua imagem personalizada
  • 4 4 é o hotspot (onde o clique é registrado)
  • auto é o cursor de fallback se a imagem não carregar

Formatos suportados

  • .cur e .ico (funcionam melhor no Windows e Edge)
  • .png (funciona amplamente, mas pode ignorar hotspots em alguns navegadores)
  • .svg (menos suportado para cursores)

Tamanho recomendado

  • Mantenha-se em 32x32 pixels ou menor para comportamento consistente
  • Imagens maiores que 128x128 podem ser ignoradas ou redimensionadas de forma inconsistente

Cursor apenas ao passar o mouse

Para mostrar um cursor personalizado apenas ao passar o mouse sobre elementos específicos:

.button:hover {
  cursor: url('hover-cursor.png'), pointer;
}

Isso mantém o cursor padrão em outros lugares e personaliza o feedback de interação.

Dicas de alinhamento e compatibilidade do cursor

  • Valores de hotspot são cruciais — eles definem o ponto ativo do cursor.
  • Fallbacks garantem degradação elegante.
  • Testes em Chrome, Firefox, Safari e Edge são essenciais.
.cursor-test {
  cursor: url('cursor.png') 16 0, auto;
}

Use ferramentas como devtools do navegador ou editores de imagem para determinar as coordenadas corretas do hotspot.

Dica extra: Evite cursores borrados

Alguns navegadores escalonam cursores PNG se eles não forem pixel-perfect. Para evitar renderização borrada:

  • Use resolução exata 1:1 (por exemplo, 32x32)
  • Evite preenchimento transparente nas suas imagens de cursor

Cursores animados personalizados (opcional)

Cursores animados não são nativamente suportados, mas existem duas soluções comuns:

1. Use um GIF

.cursor-gif {
  cursor: url('animated-cursor.gif'), auto;
}
  • Funciona em alguns navegadores, mas não é consistente.
  • GIF pode piscar ou ser ignorado.

2. Use JavaScript para rastrear o mouse

const cursor = document.querySelector('.cursor');
document.addEventListener('mousemove', e => {
  cursor.style.left = e.pageX + 'px';
  cursor.style.top = e.pageY + 'px';
});

Em seguida, estilize a div .cursor:

.cursor {
  position: fixed;
  pointer-events: none;
  width: 32px;
  height: 32px;
  background-image: url('custom.png');
  background-size: cover;
  z-index: 9999;
}

Casos de uso para cursores animados

  • Jogos e interfaces lúdicas
  • Sites criativos personalizados ou portfólios

Considerações de acessibilidade e UX

Cursores personalizados devem melhorar — não dificultar — a usabilidade. Tenha em mente:

  • Evite substituir cursores em inputs e links, a menos que isso adicione clareza
  • Garanta que designs visuais não interfiram no comportamento esperado do ponteiro
  • Use hotspots claros para evitar incompatibilidade de clique

Melhores práticas

  • Teste com usuários de teclado e leitores de tela
  • Mantenha os cursores visualmente distintos e leves
  • Evite aplicar cursores globalmente (por exemplo, ao body), a menos que faça sentido contextualmente

Armadilhas comuns e depuração

Cursor não aparece?

  • Confirme se o caminho da imagem está correto
  • Use formatos e dimensões suportados
  • Adicione um fallback: cursor: url(...), auto;

Hotspot desalinhado?

  • Ajuste as coordenadas X e Y no valor do cursor
  • Visualize em um editor de imagem para determinar o ponto exato de clique

Não funciona no Firefox ou Safari?

  • Tente usar .cur ou .ico em vez de .png
  • Evite formatos SVG e animados para interações críticas
  • O Safari ignora completamente alguns formatos de cursor de imagem

Aplicando ao elemento errado

Se seu cursor não estiver visível, certifique-se de que o CSS está aplicado ao elemento visível e interativo. Por exemplo:

body {
  cursor: url('cursor.png'), default;
}

Conclusão

Cursores personalizados podem adicionar polimento e diversão à sua UI, mas vêm com peculiaridades de navegador. Mantenha-se em formatos bem suportados, teste em diferentes navegadores e sempre inclua um fallback para garantir a usabilidade. Use cursores personalizados seletivamente onde eles melhoram a clareza ou reforçam a marca, e evite o uso excessivo onde possam confundir os usuários.

FAQs

CUR e PNG são os mais confiáveis. ICO funciona no Windows. SVG e GIF podem não ser suportados consistentemente.

Verifique o caminho da imagem, tamanho (preferencialmente 32x32) e forneça um fallback com 'auto'.

Sim. Use uma pseudo-classe hover para aplicar um cursor personalizado apenas quando o usuário passar o mouse sobre elementos específicos.

Não de forma confiável. GIFs podem funcionar em alguns navegadores. Para animação consistente, use JavaScript para mover um elemento personalizado.

Use imagens dimensionadas exatamente para 32x32 pixels sem preenchimento transparente. Evite escalonamento no CSS.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers