Zoom-In Fullscreen Overlay Responsive Navigation Menu

HTML
<link href="https://font.googleapis.com/css2?family=Poppins:wght@500&display=swap" rel="stylesheet">

<link href="https://cdn.jsdelivr.net/npm/remixicon@2.5.0/fonts/remixicon.css" rel="stylesheet">

<i class="btn-nav ri-menu-line"></i>

<nav class="nav nav-close">
    <ul class="nav-list">
        <li class="nav-items">Home</li>
        <li class="nav-items">About</li>
        <li class="nav-items">Services</li>
        <li class="nav-items">Contact</li>
    </ul>
</nav>
CSS
*{
    padding:0;
    margin:0;
}

body{
    font-family:'Poppins',sans-serif;
}

.btn-nav{
    display:inline-block;
    width:4rem;
    height:4rem;
    background-color:#30336b;
    position:fixed;
    right:1rem;
    top:1rem;
    border-radius:50%;
    color:#fff;
    font-size:2em;
    text-align:center;
    line-height:4rem;
    box-shadow:0 0 1rem rgba(0,0,0,.2);
    z-index:100;
}

.nav{
    background-color:#130f40;
    position:fixed;
    top:0;
    left:0;
    width:100%;
    height:0%;
    display:flex;
    justify-content:center;
    align-items:center;
    overflow:hidden;
}

.nav-list{
    font-size:1.6em;
    list-style:none;
}

.nav-items{
    color:#45499e;
    padding:.5rem 1rem;
    margin-bottom:1rem;
    text-align:center;
    position:relative;
    overflow:hidden;
    transition:all 1s cubic-bezier(.75,-0.35,.11,1.28);
    transform:translateY(-100vh) scale(4);
}

.nav-items::after{
    content:'';
    position:absolute;
    left:0;
    top:0;
    width:100%;
    height:100%;
    background-color:#fff;
    transition:all .5s;
    transform:translateX(-102%);
    z-index:-1;
}

.nav-items:hover::after{
    transform:translateX(0);
}

.nav-open{
    transition:height 1s cubic-bezier(0.77,0,0.175,1);
    height:100%;
}

.nav-close{
    transition:height .6s .8s cubic-bezier(0.77,0,0.175,1);
    height:0;
}
JS
const btnNav = document.querySelector('.btn-nav');
const nav = document.querySelector('.nav');
const navItems = document.querySelectorAll('.nav-items');

let navClose = true;

const handlerNavigation = () =>{
    
    let scale = 1, translateY = 0;
    
    if(!navClose){
        scale = 4;
        translateY = -100;
    }
    
    btnNav.classList.toggle('ri-menu-line');
    btnNav.classList.toggle('ri-close-line');
    
    nav.classList.toggle('nav-open');
    nav.classList.toggle('nav-close');
    
    navItems.forEach((item,index)=>{
        item.setAttribute('style',`transition-delay:.${index+1}s;transform:translateY(${translateY}vh) scale(${scale})`);
    });
    
    navClose = !navClose;
}

btnNav.addEventListener('click',handlerNavigation);

/* All credits to: https://www.youtube.com/watch?v=wqBAIP7qFKg */

Autor: Compositu

Publicado: 20/05/2023

Compartir Elemento Web

Donar a Compositu
Otras formas de ayudar
  • Compártelo en tus redes sociales.
  • Recomienda los elementos.
  • Regístrate Aquí
  • Deja tu comentario agradeciendo el aporte.

Descarga el código completo del Elemento Web y archivos necesarios (imágenes, librerias, plugins, frameword, etc)

Deja tu comentario