Animação para Menu Hambúrguer
Implementação de uma animação elegante e interativa para menu hambúrguer, que se transforma suavemente em um ícone de 'X' ao ser ativada.
HTMLCSSJavaScript
Um exemplo de implementação de menu hambúrguer moderno, enriquecido com microinterações refinadas. Ao clicar, as três linhas horizontais transformam-se de forma fluida em um “X”, fornecendo um feedback visual intuitivo ao usuário.
Código de Implementação
Esta animação é construída sobre uma base simples de HTML, CSS e JavaScript.
<!-- HTML -->
<button class="hamburger-menu" aria-label="Menu" aria-expanded="false">
<span class="line line-1"></span>
<span class="line line-2"></span>
<span class="line line-3"></span>
</button>/* CSS */
.hamburger-menu {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 48px;
height: 32px;
background: transparent;
border: none;
cursor: pointer;
padding: 0;
position: relative;
transition: transform 0.3s ease;
}
.hamburger-menu:focus-visible {
outline: 2px solid #3b82f6;
outline-offset: 6px;
border-radius: 4px;
}
.hamburger-menu:hover {
transform: scale(1.05);
}
.hamburger-menu .line {
display: block;
width: 100%;
height: 4px;
background-color: #1e293b;
border-radius: 9999px;
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
transform-origin: center;
}
/* Estilo do estado ativo (expandido) */
.hamburger-menu.active .line-1 {
transform: translateY(14px) rotate(45deg);
background-color: #ef4444;
}
.hamburger-menu.active .line-2 {
opacity: 0;
transform: translateX(-20px);
}
.hamburger-menu.active .line-3 {
transform: translateY(-14px) rotate(-45deg);
background-color: #ef4444;
}// JavaScript
const hamburger = document.querySelector('.hamburger-menu');
hamburger.addEventListener('click', function() {
// Alternar a classe active
this.classList.toggle('active');
// Suporte à acessibilidade (atualização de aria-expanded)
const isExpanded = this.classList.contains('active');
this.setAttribute('aria-expanded', isExpanded);
}); Recursos e Explicação
- Animação Fluida: A utilização da função de timing
cubic-beziergarante uma transição suave e orgânica, evitando movimentos bruscos ou mecânicos. - Acessibilidade (a11y): Os atributos
aria-labelearia-expandedsão aplicados corretamente para informar os leitores de tela sobre o estado do menu (aberto ou fechado). Adicionalmente,:focus-visibleé implementado para destacar o anel de foco, facilitando a navegação via teclado. - Alta Performance: Por depender exclusivamente das propriedades
transformeopacityna animação, minimizam-se as operações de reflow e repaint do navegador, garantindo uma performance excepcional.