<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Magic Navigation Menu</title>
    <!-- Font Awesome for icons -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" />
</head>
<style>
    /* General Styles */
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }

    html,
    body {
        width: 100%;
        height: 100%;
        position: relative;
    }

    body {
        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        background: #f1f1f1;
        height: 100vh;
        display: flex;
        justify-content: center;
        align-items: center;
        padding: 1rem;
    }

    /* css for tabsContainer */
    :root {
        --bg1: #b3ffe5;
        --bg2: #e5fff6;
        --bg3: #ffc552;
    }
.tabsContainer{
    max-width: 800px;
    border-radius: 1rem;
    overflow: hidden;
    box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.281);
}
    .tabsContainer .tabsBox {
        display: flex;
        width: 100%;
        position: relative;
        isolation: isolate;
        overflow-x: auto;
    }

    .tabsContainer .tabsBox button {
        border: none;
        outline: none;
        background-color: var(--bg1);
        padding: 0.5rem 1rem;
        flex-grow: 1;
        font-size: clamp(1rem, 1.2vw, 1.2rem);
        display: flex;
        justify-content: center;
        align-items: center;
        gap: 0.5rem;
        cursor: pointer;
    }

    .tabsContainer .tabsBox button:nth-child(even) {
        background-color: var(--bg2);
    }

    .tabsContainer .tabsBox button>* {
        z-index: 1;
    }

    .tabsContainer .tabsBox .indicator {
        position: absolute;
        top: 0;
        left: 0;
        /* width: 100px; */
        height: 100%;
        background-color: var(--bg3);
    }

    .tabsContentContainer {
        display: flex;
        overflow: hidden;
    }

    .tabsContentContainer .contentBox {
        flex-shrink: 0;
        width: 100%;
        padding: clamp(1rem,2vw,2rem);
        background-color: var(--bg3);
    }

    .tabsContentContainer .contentBox h3 {
        margin-bottom: 0.5rem;
        font-size: clamp(1.5rem, 2vw, 2rem);
    }
</style>

<body>
    <div class="tabsContainer">
        <div class="tabsBox">
            <div class="indicator"></div>
            <button><span>Home</span> <i class="fas fa-home"></i></button>
            <button><span>About</span> <i class="fas fa-user"></i></button>
            <button><span>Services</span> <i class="fas fa-cogs"></i></button>
            <button><span>Portfolio</span> <i class="fas fa-briefcase"></i></button>
            <button><span>Contact</span> <i class="fas fa-envelope"></i></button>
        </div>
        <div class="tabsContentContainer">
            <div class="contentBox">
                <h3>Home</h3>
                <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Incidunt facere recusandae cum commodi
                    neque explicabo.</p>
            </div>
            <div class="contentBox">
                <h3>About</h3>
                <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Incidunt facere recusandae cum commodi
                    neque explicabo.</p>
            </div>
            <div class="contentBox">
                <h3>Services</h3>
                <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Incidunt facere recusandae cum commodi
                    neque explicabo.</p>
            </div>
            <div class="contentBox">
                <h3>Portfolio</h3>
                <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Incidunt facere recusandae cum commodi
                    neque explicabo.</p>
            </div>
            <div class="contentBox">
                <h3>Contact</h3>
                <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Incidunt facere recusandae cum commodi
                    neque explicabo.</p>
            </div>
        </div>
    </div>

    <!-- GSAP CDN -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/gsap.min.js"></script>
    <!-- SCRIPT CODE -->
    <script>
        document.addEventListener('DOMContentLoaded', () => {
            // select neccessary elements in js
            let tabButtons = [...document.querySelectorAll('.tabsBox button')]
            let tabIndicator = document.querySelector('.tabsBox .indicator');
            let contetnBox = [...document.querySelectorAll('.tabsContentContainer .contentBox')]
            // flag
            let activeIndex;
            // initialise tab animation
            animateTabs();
            // add gsap logic
            tabButtons.forEach((tab, index) => {
                tab.addEventListener('click', () => {
                    animateTabs(tab, index)
                })
            })

            function animateTabs(tab = tabButtons[0], index = 0) {
                if (activeIndex === index) return;
                activeIndex = index;
                //moveIndicator
                gsap.to(tabIndicator, {
                    x: tab.offsetLeft,
                    width: tab.offsetWidth,
                    duration: 0.3,
                    ease: "power2.out"
                })
                //move contentBox
                gsap.to(contetnBox, {
                    x: -index * 100 + "%",
                    duration: 0.5,
                    ease: "power2.out"
                })
                //animate h3 and p tag
                let activeBox = contetnBox[index];
                let [h3, p] = activeBox.children;

                gsap.timeline()
                    .fromTo([h3, p],
                        {
                            opacity: 0,
                            y: 5
                        },
                        {
                            opacity: 1,
                            y: 0,
                            duration: 0.3,
                            ease: "power2.out",
                            stagger: 0.2,
                            delay: 0.2,
                        }
                    )
            }
        })
    </script>

</body>

</html>
/* No CSS found */
// No JS found