Simples fade IN / fade out ao hover usando css3

Simples fade IN / fade out ao hover usando css3

Última verificação: 21 de setembro de 2026
8 min de leitura
Tutorial

Nos tempos do jQuery usávamos animate e fadeIn para hovers. Em 2026, usar JavaScript só para um fade de opacidade é desperdício. A propriedade transition do CSS é acelerada por hardware na maior parte dos casos relevantes, fica mais suave e não exige scripts. Este guia é para iniciantes e para quem ainda copia snippets com transition all sem perceber o custo.

Referências: módulo de CSS Transitions na MDN e guias de animação em web.dev. Duração típica de UI: cerca de duzentos a trezentos milissegundos.

#Porque CSS vence JavaScript neste caso

Transições de opacity e transform correm de forma barata. Não bloqueiam a thread principal com timers. Poupan energia em telemóveis. O browser pode otimizar. JavaScript continua necessário para gestos complexos, mas não para um hover de cartão.

#Fade básico

Defina opacity no estado normal, transition com a propriedade específica e duração, e altere opacity no hover. O elemento volta sozinho quando o rato sai. Preferência: ease-in-out ou ease-out para controlos de interface. Evite durações longas que fazem a UI parecer lenta.

#Propriedades certas

Anime opacity e transform. Evite animar width, height, top e left - forçam layout. Evite transition all: qualquer mudança de margem ou cor de borda passa a ser animada e custa mais. Especifique a lista de propriedades.

Timing: linear parece robótico. Ease-out responde depressa e abranda no fim - bom para hovers. Cubic-bezier personalizado só quando o design system o pede.

#Padrões úteis

Fade mais escala ligeira em imagens de cartão. Fade da imagem com texto sobreposto na galeria. Botões com mudança de fundo e sombra curta. Sempre com preferências de movimento reduzido: respeite prefers-reduced-motion e desative ou encurte animações.

#Acessibilidade e toque

Hover não existe da mesma forma em ecrãs táteis. Não esconda informação crítica só no hover. Use focus-visible para teclado. Garanta contraste no estado final. Não dependa só da cor para o estado ativo.

#Desempenho em WordPress

Em temas e blocos, mantenha CSS de hover no ficheiro do tema ou num bloco, não em inline gigante por página. Evite bibliotecas de animação só para fades. Teste em telemóvel real de gama média. Num portátil antigo a diferença entre transform e left nota-se de imediato.

#Erros comuns

Durações de um segundo em botões. Transition all em contentores grandes. Animar box-shadow pesado em dezenas de cartões simultâneos. Esquecer o estado focus. Usar JavaScript para togglar classes sem necessidade. Ignorar reduced motion.

#Nota final de implementação

Antes de fechar o pull request, peça a alguém que navegue só com o teclado e a outra pessoa só com o telemóvel. Se o hover for a única forma de ver o título do cartão, redesenhe. Motion boa é invisível até faltar - e nunca esconde conteúdo.

#Resumo

Use propriedades específicas, duzentos a trezentos milissegundos, transform e opacity, teste em dispositivos reais. Aplicamos estes detalhes de front-end em temas feitos à medida em WordPress.

#Exemplo de cartão de produto

No catálogo WooCommerce um hover suave na miniatura ajuda a hierarquia visual sem page builder cheio de efeitos. Mantenha a transição curta. Não escale acima de cinco por cento. Combine com alt text útil e ligação clara - animação não substitui informação.

#Coordenação com design systems

Documente tokens de duração e easing no mesmo sítio que cores e raios. Se o design fala em motion, o CSS deve mapear esses tokens. Evite cada programador inventar 0.17s ease diferentes.

#Depuração

No Chrome DevTools, inspecione Animations e Rendering para ver se há paint excessivo. Se o hover causa jank, verifique se está a animar propriedades de layout ou filtros pesados.

#Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 1. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 2. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 3. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 4. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 5. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 6. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 7. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 8. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 9. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 10. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 11. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 12. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 13. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 14. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 15. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 16. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 17. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 18. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 19. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 20. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 21. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 22. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 23. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 24. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Mer praksisnotat 25. ## Quando JavaScript ainda faz sentido

Menus complexos, sequências encadeadas, scrubbing, e estados que não são hover puro. Mesmo aí, prefira CSS variables e classes a animar pixel a pixel no requestAnimationFrame sem necessidade.

Próximo passo

Transforme o artigo numa implementação real

Este bloco reforça a ligação interna e conduz o leitor para o passo seguinte mais útil dentro da arquitetura do site.

Quer implementar isto no seu site?

Se quer transformar o artigo em melhorias concretas, redesign ou num plano de implementação, posso fechar o escopo e executar.

Artigos Relacionados