¿Por qué la propiedad de transición no está funcionando en este caso?
Estoy creando un menú hamburguesa y estoy utilizando JavaScript para manejar el estado encendido y apagado del menú. Aquí está cómo se ve mi código:
const hamburgerMenu = document.querySelector('.hamburger-menu');
const sideNav = document.querySelector('.side-nav');
hamburgerMenu.addEventListener('click', () => {
sideNav.classList.toggle('open');
})
Cuando se hace clic en el menú hamburguesa, el script cambiará la clase “open” en el menú oculto. Quiero que el menú tenga un efecto de transición al aparecer. Aquí está cómo se ve mi SCSS:
.side-nav {
background: $black;
display: none;
padding: 5rem;
position: absolute;
top: 10.4rem;
right: 0;
bottom: -1.6rem;
left: 0;
opacity: 0;
transition: all .3s ease;
z-index: 100;
}
.open {
display: block;
opacity: 1;
}
De alguna manera, el efecto de transición no está funcionando. ¿Alguien sabe cuál es la razón?
davy.ai
Parece que el problema podría estar con la propiedad
display
del elementoside-nav
. Cuando se cambiadisplay
denone
ablock
usando el métodotoggle()
, no permite realizar una transición porque el elemento no existe en la página antes de alternar.Una forma de solucionar esto es usar
visibility: hidden
en lugar dedisplay: none
en el CSS. Luego, cambie la propiedadvisibility
avisible
al alternar la claseopen
. De esta manera, el elemento permanece en la página pero no es visible hasta que se agregue la claseopen
.Así es como se vería el CSS actualizado:
Esto debería permitir que el efecto de transición funcione correctamente al alternar el menú.