Vissza a webes elemekhez
Navigáció

Futurisztikus lebegő vonalmenü

Élő előnézet – a komponens teljes méretben.

Élő előnézet
HTML · CSS · JS
HTML
<nav class="future-line-menu">

    <a href="#" class="future-item active">
        <span class="future-number">01</span>
        <span class="future-label">Kezdőlap</span>
    </a>

    <a href="#" class="future-item">
        <span class="future-number">02</span>
        <span class="future-label">Rólunk</span>
    </a>

    <a href="#" class="future-item">
        <span class="future-number">03</span>
        <span class="future-label">Munkáink</span>
    </a>

    <a href="#" class="future-item">
        <span class="future-number">04</span>
        <span class="future-label">Szolgáltatások</span>
    </a>

    <a href="#" class="future-item">
        <span class="future-number">05</span>
        <span class="future-label">Kapcsolat</span>
    </a>

</nav>
CSS
.future-line-menu {
    display: flex;
    align-items: stretch;

    width: max-content;
    max-width: calc(100% - 30px);

    margin: 0 auto;

    border-top: 1px solid rgba(46, 204, 113, 0.22);
    border-bottom: 1px solid rgba(46, 204, 113, 0.12);

    background: rgba(8, 13, 19, 0.75);
}

.future-item {
    position: relative;

    min-width: 125px;
    padding: 17px 22px;

    display: flex;
    flex-direction: column;
    gap: 5px;

    color: #657180;

    text-decoration: none;

    border-left: 1px solid rgba(255, 255, 255, 0.055);

    overflow: hidden;

    transition:
        color 0.3s ease,
        background 0.3s ease;
}

.future-item:last-child {
    border-right: 1px solid rgba(255, 255, 255, 0.055);
}

.future-item::before {
    content: "";

    position: absolute;
    left: 0;
    bottom: 0;

    width: 100%;
    height: 2px;

    background: #2ecc71;

    transform: scaleX(0);
    transform-origin: left;

    transition: transform 0.35s ease;

    box-shadow: 0 0 12px rgba(46, 204, 113, 0.7);
}

.future-item::after {
    content: "";

    position: absolute;
    top: 0;
    right: 0;

    width: 1px;
    height: 100%;

    background: linear-gradient(
        to bottom,
        transparent,
        rgba(46, 204, 113, 0.5),
        transparent
    );

    opacity: 0;

    transition: opacity 0.3s ease;
}

.future-item:hover,
.future-item.active {
    color: #ffffff;
    background: rgba(46, 204, 113, 0.045);
}

.future-item:hover::before,
.future-item.active::before {
    transform: scaleX(1);
}

.future-item:hover::after {
    opacity: 1;
}

.future-number {
    color: #3f4b58;

    font-family: monospace;
    font-size: 10px;
    letter-spacing: 2px;

    transition: color 0.3s ease;
}

.future-label {
    font-size: 13px;
    letter-spacing: 0.5px;
}

.future-item:hover .future-number,
.future-item.active .future-number {
    color: #2ecc71;
}

.future-item.active::before {
    box-shadow:
        0 0 8px rgba(46, 204, 113, 0.7),
        0 0 20px rgba(46, 204, 113, 0.3);
}

@media (max-width: 700px) {
    .future-line-menu {
        width: calc(100% - 30px);
        flex-wrap: wrap;
    }

    .future-item {
        flex: 1 1 120px;
    }
}

@media (max-width: 480px) {
    .future-label {
        font-size: 12px;
    }

    .future-item {
        min-width: 50%;
    }
}
JavaScript
document.querySelectorAll(".future-line-menu").forEach(menu => {

    const items = menu.querySelectorAll(".future-item");

    items.forEach(item => {

        item.addEventListener("click", function () {

            items.forEach(link => {
                link.classList.remove("active");
            });

            this.classList.add("active");
        });

    });

});