Hover em interfaces: o que é, tipos de efeitos e implementação

Autor: IT Sectr Publicado: 2026-08-03 Tempo de leitura: 6 min

Hover é uma pseudoclasse CSS e um estado visual de um elemento de interface que é ativado quando o ponteiro do mouse está sobre ele. Esse mecanismo fornece feedback ao usuário, confirmando que o elemento está pronto para interação. De acordo com MDN Web Docs (2026), a pseudoclasse :hover é suportada por todos os navegadores modernos e é um dos seletores CSS mais usados para criar interatividade.

Principais conclusões

  • Hover — pseudoclasse CSS :hover, ativada quando o cursor do mouse está sobre um elemento
  • Feedback — hover confirma que o elemento é interativo e pronto para ser clicado
  • Transições CSS — transition adiciona suavidade aos efeitos hover, melhorando a percepção
  • Dispositivos touch — hover não existe em telas móveis, exigindo implementação alternativa
  • Tipos de efeitos — mudança de cor, sombra, escala, fundo, borda e texto

O que é hover em design web

Hover (do inglês “to hover”) — uma reação visual de um elemento de interface quando o cursor do mouse está sobre ele. O termo é usado para se referir tanto à pseudoclasse CSS :hover quanto ao estado do elemento ao passar o mouse.

O conceito de hover originou-se nas primeiras interfaces gráficas do Xerox Alto (1973) e foi padronizado na web com a introdução do CSS2 em 1998. Desde então, o hover tornou-se parte integrante da experiência do usuário em desktop.

De acordo com CSS Usage Statistics (2025), 94% dos sites no top 1000 usam a pseudoclasse :hover para pelo menos um elemento. O hover é mais comumente aplicado a botões (89%), links (85%) e cartões (62%).

Diferença entre hover e outros estados

Hover ≠ active. :hover é ativado ao passar o mouse, :active é ativado no momento do clique. :focus é ativado ao receber foco via teclado. Cada estado tem seu propósito. Hover é uma pré-visualização, active é uma confirmação de ação.

A pseudoclasse :hover em CSS

A pseudoclasse :hover em CSS aplica estilos a um elemento quando o usuário passa o cursor do mouse sobre ele. Funciona com qualquer elemento HTML, mas é mais comumente usada com elementos interativos.

css
/* Basic hover implementation */
.button {
    background: #4A90D9;
    color: white;
    padding: 12px 24px;
    border: none;
    transition: all 0.3s ease;
}

.button:hover {
    background: #357ABD;
    transform: translateY(-2px);
    box-shadow: 0 6px 20px rgba(74,144,217,0.4);
}

A especificidade do seletor :hover é a mesma de uma classe (0,1,0). Se você precisar sobrescrever o hover para um elemento específico, use um seletor com maior especificidade. A ordem de declaração é importante: se :hover for declarado depois de :focus, o hover pode não funcionar ao receber foco.

Pseudoclasses combinadas

:hover pode ser combinado com outras pseudoclasses para criar lógica complexa. Por exemplo, .card:hover .card__title altera o estilo do título dentro do cartão ao passar o mouse sobre o cartão inteiro. Isso permite criar efeitos com animação aninhada.

Tipos de efeitos hover

Os efeitos hover são categorizados pelo tipo de propriedade que está sendo alterada. Cada tipo é adequado para diferentes cenários e cria uma sensação específica no usuário.

Tipo de efeitoPropriedade CSSExemplo de uso
Corbackground, colorBotão muda a cor de fundo ao passar o mouse
Sombrabox-shadowCartão se eleva com uma sombra
Escalatransform: scaleÍcone aumenta ao passar o mouse
Deslocamentotransform: translateElemento move-se para cima ou para os lados
Sublinhadoborder-bottom, underlineLink ganha um sublinhado ao passar o mouse
Filtrofilter: brightnessImagem fica mais clara ou mais escura
Gradientebackground-imageFundo se transforma ao passar o mouse

O tipo mais eficaz é uma combinação de efeitos de cor e sombra. O Material Design recomenda usar a mudança de elevação (alteração da altura da sombra) como o tipo principal de feedback hover.

De acordo com Google Material Design (2024), um efeito hover deve ser perceptível mas não perturbador. A duração de animação recomendada é de 200 a 300 milissegundos. Efeitos muito rápidos (menos de 100 ms) podem passar despercebidos, enquanto efeitos muito lentos (mais de 500 ms) irritam o usuário.

Transições CSS para efeitos suaves

A propriedade CSS transition torna os efeitos hover suaves ao animar as mudanças de propriedades ao longo do tempo. Sem transition, o hover é ativado instantaneamente, o que parece brusco e desagradável aos olhos.

css
/* Different transitions per property */
.card {
    transition:
        box-shadow 0.3s ease-out,
        transform 0.2s ease-out,
        background 0.15s linear;
}

.card:hover {
    box-shadow: 0 8px 30px rgba(0,0,0,0.15);
    transform: translateY(-4px);
}

A duração da transition depende do contexto. Para elementos pequenos (ícones, links) — 150–200 ms. Para elementos grandes (cartões, modais) — 250–350 ms. A função de easing ease-out desacelera suavemente a animação no final, criando uma sensação natural.

Prática recomendada — especificar transition para cada propriedade animada individualmente. A propriedade all é conveniente durante o desenvolvimento, mas em produção é melhor definir propriedades específicas para animação para evitar efeitos inesperados.

Hover em dispositivos touch

Em dispositivos touch, o conceito de hover não existe: não há cursor que possa pairar sobre um elemento. Tocar em um elemento ativa imediatamente um clique, ignorando o estado hover. Isso cria problemas se a interface depende exclusivamente do hover.

De acordo com StatCounter (2026), 62% do tráfego web global vem de dispositivos móveis. Ignorar a ausência de hover em telas touch significa perder o controle da UX para a maioria dos usuários.

css
/* Disable hover on touch devices */
@media (hover: none) and (pointer: coarse) {
    .button:hover {
        background: initial;
        transform: none;
    }
}

A media query hover: none permite detectar que um dispositivo não suporta hover. Nesses dispositivos, os efeitos hover são desativados e a interação é baseada nos estados :active e :focus. Uma solução alternativa é mostrar o conteúdo hover ao tocar (o primeiro toque mostra o hover, o segundo executa a ação), mas esse padrão degrada a UX.

Acessibilidade dos efeitos hover

A acessibilidade do hover é um aspecto crítico que muitas vezes é negligenciado. Usuários que navegam pela interface com o teclado não conseguem ativar :hover. Funções disponíveis apenas através do hover tornam-se inacessíveis para eles.

Regra WCAG 2.2 (Critério de Sucesso 1.4.13 — Conteúdo ao passar o mouse ou ao receber foco): o conteúdo que aparece ao passar o mouse também deve estar disponível ao receber foco. Se o hover mostra informações adicionais (tooltip, menu suspenso), as mesmas informações devem estar disponíveis em :focus.

css
/* Hover + focus for accessibility */
.tooltip-trigger:hover .tooltip,
.tooltip-trigger:focus .tooltip {
    opacity: 1;
    visibility: visible;
}

/* Disable animation for vestibular disorder */
@media (prefers-reduced-motion: reduce) {
    *:hover {
        transition: none;
    }
}

A media query prefers-reduced-motion — respeite as configurações do sistema do usuário. Se o usuário desativou a animação no sistema, os efeitos hover devem ser aplicados instantaneamente, sem transition. Isso ajuda pessoas com distúrbios vestibulares.

Recomendações adicionais: não use hover para funções críticas, não dependa apenas da cor para transmitir informações ao passar o mouse (adicione um ícone ou texto) e garanta contraste suficiente para os estados hover.

Perguntas frequentes

Qual a diferença entre :hover e :focus em CSS?

:hover é ativado quando o mouse está sobre um elemento. :focus é ativado quando um elemento recebe foco — via tabulação do teclado ou após um clique. Para acessibilidade, é importante duplicar os efeitos hover através de :focus.

Pode-se usar hover em dispositivos móveis?

Em dispositivos touch, o hover funciona de forma instável: o primeiro toque ativa :hover, o segundo toque aciona o clique. Isso cria confusão. Recomenda-se usar a media query @media (hover: none) para desativar os efeitos hover em telas touch.

Como criar um efeito hover em JavaScript?

Use os eventos mouseenter (passar o mouse) e mouseleave (sair com o cursor). Ao contrário do CSS hover, o JavaScript dá controlo total sobre a animação e permite criar efeitos sequenciais complexos com atrasos.

Por que o hover não funciona no Safari móvel?

iOS Safari tem um tratamento especial de :hover. Após um toque, o elemento entra no estado :hover e permanece assim até o próximo toque. Isso pode fazer com que os estilos hover fiquem presos. A solução é usar @media (hover: hover) para aplicar hover apenas em dispositivos com suporte a hover.

Qual easing é melhor para efeitos hover?

ease-out (cubic-bezier(0, 0, 0.2, 1)) é a escolha ideal para hover: um início rápido e uma desaceleração suave no final. ease-in-out é adequado para efeitos com duas fases (aparecimento e desaparecimento). Evite linear — parece pouco natural.

Resumo

  • Hover — pseudoclasse CSS :hover que fornece feedback quando o cursor está sobre um elemento
  • Principais efeitos — mudanças de cor, sombra, escala, deslocamento, sublinhado e filtro
  • Transições CSS — transition adiciona suavidade com duração ideal de 200–300 ms
  • Dispositivos touch — não suportam hover, use a media query @media (hover: none)
  • Acessibilidade — duplique hover através de :focus, respeite prefers-reduced-motion
  • Melhor prática — combinação de efeitos de cor e sombra com ease-out em 250 ms

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também