Vissza a webes elemekhez
Fejlécek

Éjféli elegancia

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

Élő előnézet
HTML · CSS · JS
HTML
<header class="elegance-header">
    <div class="header-noise"></div>
    <div class="header-glow header-glow-1"></div>
    <div class="header-glow header-glow-2"></div>

    <nav class="elegance-nav">
        <a href="#" class="elegance-logo">
            <span>WE</span>
            <strong>WebElements</strong>
        </a>

        <div class="elegance-menu">
            <a href="#munkak">Munkáink</a>
            <a href="#elemek">Elemeink</a>
            <a href="#rolunk">Rólunk</a>
            <a href="#kapcsolat">Kapcsolat</a>
        </div>

        <a href="#kapcsolat" class="nav-contact">
            <span>Beszéljünk</span>
            <i></i>
        </a>

        <button class="mobile-toggle" aria-label="Menü">
            <span></span>
            <span></span>
        </button>
    </nav>

    <div class="elegance-content">
        <div class="elegance-copy">
            <div class="eyebrow reveal-item">
                <span class="eyebrow-line"></span>
                <span>Kreatív digitális megoldások</span>
            </div>

            <h1 class="elegance-title">
                <span class="title-line reveal-item">A jó design</span>
                <span class="title-line reveal-item">nem csak <em>látható.</em></span>
                <span class="title-line reveal-item">Érezhető.</span>
            </h1>

            <p class="elegance-text reveal-item">
                Letisztult weboldalak, karakteres vizuális megoldások
                és finom animációk, amelyek emlékezetessé teszik
                az első pillanatot.
            </p>

            <div class="elegance-actions reveal-item">
                <a href="#munkak" class="elegance-button magnetic">
                    <span>Felfedezem</span>
                    <b>↗</b>
                </a>

                <a href="#elemek" class="text-link">
                    <span>Webes elemek</span>
                    <i></i>
                </a>
            </div>
        </div>

        <div class="elegance-visual reveal-visual">
            <div class="visual-frame">
                <div class="visual-image"></div>

                <div class="visual-overlay"></div>

                <div class="visual-corner corner-tl"></div>
                <div class="visual-corner corner-tr"></div>
                <div class="visual-corner corner-bl"></div>
                <div class="visual-corner corner-br"></div>

                <div class="visual-caption">
                    <span>01 / 04</span>
                    <span>Vizuális élmény</span>
                </div>
            </div>

            <div class="floating-word">CREATE</div>
            <div class="floating-dot dot-1"></div>
            <div class="floating-dot dot-2"></div>
            <div class="floating-dot dot-3"></div>
        </div>
    </div>

    <div class="header-bottom">
        <div class="scroll-indicator">
            <span>Görgess tovább</span>
            <i></i>
        </div>

        <div class="header-number">WE — 01</div>
    </div>

    <div class="cursor-glow"></div>
</header>
CSS
@import url('https://fonts.googleapis.com/css2?family=Bodoni+Moda:opsz,wght@6..96,400;6..96,500;6..96,600&family=Inter:wght@300;400;500;600&display=swap');

.elegance-header {
    --bg: #080b11;
    --bg-soft: #0d1219;
    --text: #f1eee8;
    --muted: #969ba3;
    --accent: #b9d8c5;
    --line: rgba(255,255,255,.12);

    position: relative;
    min-height: 100vh;
    overflow: hidden;
    background:
        radial-gradient(circle at 72% 45%, rgba(88,124,103,.13), transparent 30%),
        radial-gradient(circle at 20% 20%, rgba(255,255,255,.035), transparent 25%),
        var(--bg);
    color: var(--text);
    font-family: 'Inter', sans-serif;
    isolation: isolate;
}

.elegance-header * {
    box-sizing: border-box;
}

.header-noise {
    position: absolute;
    inset: 0;
    z-index: -1;
    opacity: .035;
    pointer-events: none;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.8'/%3E%3C/svg%3E");
}

.header-glow {
    position: absolute;
    border-radius: 50%;
    filter: blur(90px);
    pointer-events: none;
    opacity: .18;
}

.header-glow-1 {
    width: 380px;
    height: 380px;
    top: 15%;
    right: 10%;
    background: #9cc6ab;
    animation: glowFloat 8s ease-in-out infinite;
}

.header-glow-2 {
    width: 250px;
    height: 250px;
    left: -100px;
    bottom: 5%;
    background: #536b8a;
    animation: glowFloat 11s ease-in-out infinite reverse;
}

.elegance-nav {
    position: relative;
    z-index: 10;
    width: min(1380px, calc(100% - 80px));
    height: 100px;
    margin: auto;
    display: flex;
    align-items: center;
    justify-content: space-between;
    border-bottom: 1px solid transparent;
    transition: .45s ease;
}

.elegance-nav.scrolled {
    height: 76px;
}

.elegance-logo {
    display: flex;
    align-items: center;
    gap: 13px;
    color: var(--text);
    text-decoration: none;
}

.elegance-logo span {
    width: 38px;
    height: 38px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(255,255,255,.3);
    border-radius: 50%;
    font-size: 11px;
    letter-spacing: 1px;
    transition: .4s ease;
}

.elegance-logo:hover span {
    transform: rotate(180deg);
    border-color: var(--accent);
}

.elegance-logo strong {
    font-size: 13px;
    font-weight: 500;
    letter-spacing: .08em;
}

.elegance-menu {
    display: flex;
    align-items: center;
    gap: 42px;
}

.elegance-menu a,
.nav-contact,
.text-link {
    position: relative;
    color: var(--muted);
    text-decoration: none;
    font-size: 12px;
    transition: color .3s ease;
}

.elegance-menu a::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: -7px;
    width: 0;
    height: 1px;
    background: var(--accent);
    transition: width .4s cubic-bezier(.22,1,.36,1);
}

.elegance-menu a:hover {
    color: var(--text);
}

.elegance-menu a:hover::after {
    width: 100%;
}

.nav-contact {
    display: flex;
    align-items: center;
    gap: 12px;
    color: var(--text);
}

.nav-contact i {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--accent);
    box-shadow: 0 0 15px rgba(185,216,197,.8);
    animation: pulseDot 2s infinite;
}

.elegance-content {
    position: relative;
    z-index: 2;
    width: min(1380px, calc(100% - 80px));
    min-height: calc(100vh - 150px);
    margin: auto;
    display: grid;
    grid-template-columns: 1.05fr .95fr;
    align-items: center;
    gap: 80px;
    padding: 55px 0 100px;
}

.elegance-copy {
    max-width: 720px;
}

.eyebrow {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-bottom: 32px;
    color: var(--muted);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: .22em;
}

.eyebrow-line {
    width: 45px;
    height: 1px;
    background: var(--accent);
    transform-origin: left;
}

.elegance-title {
    margin: 0;
    font-family: 'Bodoni Moda', serif;
    font-size: clamp(58px, 7vw, 108px);
    font-weight: 400;
    line-height: .91;
    letter-spacing: -.045em;
}

.title-line {
    display: block;
    overflow: hidden;
}

.elegance-title em {
    color: var(--accent);
    font-style: italic;
    font-weight: 400;
}

.elegance-text {
    max-width: 480px;
    margin: 42px 0 0;
    color: var(--muted);
    font-size: 14px;
    line-height: 1.9;
    font-weight: 300;
}

.elegance-actions {
    display: flex;
    align-items: center;
    gap: 32px;
    margin-top: 42px;
}

.elegance-button {
    position: relative;
    min-width: 170px;
    height: 54px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 25px;
    padding: 0 9px 0 22px;
    overflow: hidden;
    color: #0a0d11;
    background: var(--text);
    text-decoration: none;
    font-size: 11px;
    letter-spacing: .08em;
    transition: transform .35s ease, box-shadow .35s ease;
}

.elegance-button::before {
    content: "";
    position: absolute;
    inset: 0;
    background: var(--accent);
    transform: translateX(-101%);
    transition: transform .5s cubic-bezier(.22,1,.36,1);
}

.elegance-button:hover::before {
    transform: translateX(0);
}

.elegance-button span,
.elegance-button b {
    position: relative;
    z-index: 1;
}

.elegance-button b {
    width: 36px;
    height: 36px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(0,0,0,.18);
    font-size: 15px;
    font-weight: 400;
    transition: transform .4s ease;
}

.elegance-button:hover b {
    transform: rotate(45deg);
}

.text-link {
    display: flex;
    align-items: center;
    gap: 13px;
}

.text-link i {
    width: 30px;
    height: 1px;
    background: var(--muted);
    transition: width .4s ease, background .4s ease;
}

.text-link:hover {
    color: var(--text);
}

.text-link:hover i {
    width: 48px;
    background: var(--accent);
}

.elegance-visual {
    position: relative;
    width: min(100%, 560px);
    justify-self: end;
    perspective: 1000px;
}

.visual-frame {
    position: relative;
    aspect-ratio: .82;
    overflow: hidden;
    border: 1px solid rgba(255,255,255,.17);
    transform-style: preserve-3d;
    transition: transform .2s ease-out;
}

.visual-frame::before {
    content: "";
    position: absolute;
    inset: 15px;
    border: 1px solid rgba(255,255,255,.16);
    z-index: 3;
    pointer-events: none;
}

.visual-image {
    position: absolute;
    inset: -4%;
    background:
        linear-gradient(180deg, rgba(0,0,0,.02), rgba(0,0,0,.5)),
        url("images/header.jpg") center / cover no-repeat;
    filter: saturate(.72);
    transform: scale(1.06);
    transition: transform 1.4s cubic-bezier(.22,1,.36,1);
}

.visual-frame:hover .visual-image {
    transform: scale(1.13);
}

.visual-overlay {
    position: absolute;
    inset: 0;
    z-index: 2;
    background:
        linear-gradient(135deg, rgba(7,11,16,.2), transparent 50%),
        linear-gradient(0deg, rgba(7,11,16,.7), transparent 45%);
}

.visual-corner {
    position: absolute;
    z-index: 4;
    width: 28px;
    height: 28px;
    border-color: rgba(255,255,255,.7);
}

.corner-tl {
    top: 25px;
    left: 25px;
    border-top: 1px solid;
    border-left: 1px solid;
}

.corner-tr {
    top: 25px;
    right: 25px;
    border-top: 1px solid;
    border-right: 1px solid;
}

.corner-bl {
    bottom: 25px;
    left: 25px;
    border-bottom: 1px solid;
    border-left: 1px solid;
}

.corner-br {
    bottom: 25px;
    right: 25px;
    border-bottom: 1px solid;
    border-right: 1px solid;
}

.visual-caption {
    position: absolute;
    z-index: 5;
    bottom: 35px;
    left: 35px;
    right: 35px;
    display: flex;
    justify-content: space-between;
    color: rgba(255,255,255,.7);
    font-size: 9px;
    letter-spacing: .18em;
    text-transform: uppercase;
}

.floating-word {
    position: absolute;
    z-index: -1;
    top: 15%;
    right: -105px;
    color: transparent;
    -webkit-text-stroke: 1px rgba(255,255,255,.1);
    font-family: 'Bodoni Moda', serif;
    font-size: 80px;
    letter-spacing: -.06em;
    transform: rotate(90deg);
    animation: wordFloat 7s ease-in-out infinite;
}

.floating-dot {
    position: absolute;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: var(--accent);
    box-shadow: 0 0 18px rgba(185,216,197,.8);
}

.dot-1 {
    top: 8%;
    left: -25px;
    animation: dotFloat 4s ease-in-out infinite;
}

.dot-2 {
    right: -15px;
    bottom: 25%;
    animation: dotFloat 5s ease-in-out infinite 1s;
}

.dot-3 {
    left: 12%;
    bottom: -15px;
    animation: dotFloat 6s ease-in-out infinite 2s;
}

.header-bottom {
    position: absolute;
    z-index: 5;
    left: 40px;
    right: 40px;
    bottom: 28px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    color: rgba(255,255,255,.38);
    font-size: 9px;
    letter-spacing: .15em;
    text-transform: uppercase;
}

.scroll-indicator {
    display: flex;
    align-items: center;
    gap: 14px;
}

.scroll-indicator i {
    width: 45px;
    height: 1px;
    position: relative;
    overflow: hidden;
    background: rgba(255,255,255,.15);
}

.scroll-indicator i::after {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    width: 15px;
    height: 1px;
    background: var(--accent);
    animation: scrollLine 2s ease-in-out infinite;
}

.cursor-glow {
    position: fixed;
    z-index: 100;
    width: 220px;
    height: 220px;
    border-radius: 50%;
    pointer-events: none;
    background: radial-gradient(circle, rgba(185,216,197,.08), transparent 65%);
    transform: translate(-50%, -50%);
    opacity: 0;
    transition: opacity .3s ease;
}

.mobile-toggle {
    display: none;
    width: 40px;
    height: 40px;
    border: 0;
    background: transparent;
    cursor: pointer;
}

.mobile-toggle span {
    display: block;
    width: 24px;
    height: 1px;
    margin: 6px auto;
    background: var(--text);
    transition: .3s;
}

.reveal-item {
    opacity: 0;
    transform: translateY(35px);
}

.elegance-header.loaded .reveal-item {
    animation: revealUp .9s cubic-bezier(.22,1,.36,1) forwards;
}

.elegance-header.loaded .eyebrow {
    animation-delay: .15s;
}

.elegance-header.loaded .title-line:nth-child(1) {
    animation-delay: .3s;
}

.elegance-header.loaded .title-line:nth-child(2) {
    animation-delay: .43s;
}

.elegance-header.loaded .title-line:nth-child(3) {
    animation-delay: .56s;
}

.elegance-header.loaded .elegance-text {
    animation-delay: .72s;
}

.elegance-header.loaded .elegance-actions {
    animation-delay: .86s;
}

.reveal-visual {
    opacity: 0;
    transform: translateY(45px) scale(.96);
}

.elegance-header.loaded .reveal-visual {
    animation: visualReveal 1.3s cubic-bezier(.22,1,.36,1) .4s forwards;
}

@keyframes revealUp {
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@keyframes visualReveal {
    to {
        opacity: 1;
        transform: translateY(0) scale(1);
    }
}

@keyframes glowFloat {
    0%, 100% {
        transform: translate3d(0,0,0) scale(1);
    }
    50% {
        transform: translate3d(25px,-20px,0) scale(1.08);
    }
}

@keyframes pulseDot {
    0%, 100% {
        opacity: 1;
        transform: scale(1);
    }
    50% {
        opacity: .45;
        transform: scale(.65);
    }
}

@keyframes wordFloat {
    0%, 100% {
        transform: rotate(90deg) translateX(0);
    }
    50% {
        transform: rotate(90deg) translateX(20px);
    }
}

@keyframes dotFloat {
    0%, 100% {
        transform: translate(0,0);
    }
    50% {
        transform: translate(8px,-14px);
    }
}

@keyframes scrollLine {
    0% {
        transform: translateX(-20px);
    }
    100% {
        transform: translateX(55px);
    }
}

@media (max-width: 1000px) {
    .elegance-content {
        grid-template-columns: 1fr;
        gap: 55px;
        padding-top: 30px;
    }

    .elegance-copy {
        max-width: 700px;
    }

    .elegance-visual {
        width: min(100%, 500px);
        justify-self: start;
    }

    .elegance-title {
        font-size: clamp(55px, 9vw, 90px);
    }

    .elegance-menu {
        display: none;
    }

    .nav-contact {
        margin-left: auto;
        margin-right: 25px;
    }

    .mobile-toggle {
        display: block;
    }
}

@media (max-width: 600px) {
    .elegance-nav,
    .elegance-content {
        width: calc(100% - 36px);
    }

    .elegance-nav {
        height: 80px;
    }

    .elegance-logo strong {
        display: none;
    }

    .nav-contact {
        display: none;
    }

    .elegance-content {
        padding: 30px 0 80px;
        min-height: auto;
    }

    .elegance-title {
        font-size: clamp(48px, 15vw, 72px);
    }

    .elegance-text {
        font-size: 13px;
        margin-top: 30px;
    }

    .elegance-actions {
        align-items: flex-start;
        flex-direction: column;
        gap: 25px;
    }

    .visual-frame {
        aspect-ratio: .85;
    }

    .floating-word {
        display: none;
    }

    .header-bottom {
        left: 18px;
        right: 18px;
        bottom: 15px;
    }

    .header-number {
        display: none;
    }
}
JavaScript
document.addEventListener("DOMContentLoaded", () => {

    const header = document.querySelector(".elegance-header");
    const nav = document.querySelector(".elegance-nav");
    const visual = document.querySelector(".visual-frame");
    const cursorGlow = document.querySelector(".cursor-glow");
    const magneticButtons = document.querySelectorAll(".magnetic");
    const mobileToggle = document.querySelector(".mobile-toggle");

    if (!header) return;

    /* Belépő animáció */
    requestAnimationFrame(() => {
        header.classList.add("loaded");
    });

    /* Navigáció görgetéskor */
    const handleScroll = () => {
        nav.classList.toggle("scrolled", window.scrollY > 30);
    };

    window.addEventListener("scroll", handleScroll, { passive: true });
    handleScroll();

    /* Kurzor követő fény */
    if (cursorGlow && window.matchMedia("(pointer:fine)").matches) {

        window.addEventListener("mousemove", (event) => {
            cursorGlow.style.left = `${event.clientX}px`;
            cursorGlow.style.top = `${event.clientY}px`;
            cursorGlow.style.opacity = "1";
        });

        header.addEventListener("mouseleave", () => {
            cursorGlow.style.opacity = "0";
        });
    }

    /* Finom 3D parallaxis a képen */
    if (visual && window.matchMedia("(pointer:fine)").matches) {

        visual.addEventListener("mousemove", (event) => {

            const rect = visual.getBoundingClientRect();

            const x = (event.clientX - rect.left) / rect.width - 0.5;
            const y = (event.clientY - rect.top) / rect.height - 0.5;

            const rotateX = y * -5;
            const rotateY = x * 6;

            visual.style.transform =
                `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
        });

        visual.addEventListener("mouseleave", () => {
            visual.style.transform =
                "perspective(1000px) rotateX(0deg) rotateY(0deg)";
        });
    }

    /* Mágneses gomb */
    magneticButtons.forEach(button => {

        button.addEventListener("mousemove", (event) => {

            const rect = button.getBoundingClientRect();

            const x = event.clientX - rect.left - rect.width / 2;
            const y = event.clientY - rect.top - rect.height / 2;

            button.style.transform =
                `translate(${x * 0.12}px, ${y * 0.12}px)`;
        });

        button.addEventListener("mouseleave", () => {
            button.style.transform = "translate(0,0)";
        });
    });

    /* Mobil menü */
    if (mobileToggle) {

        mobileToggle.addEventListener("click", () => {

            const menu = document.querySelector(".elegance-menu");

            if (!menu) return;

            const open = menu.classList.toggle("mobile-open");

            mobileToggle.classList.toggle("active", open);

            if (open) {
                menu.style.display = "flex";
            } else {
                menu.style.display = "";
            }
        });
    }

    /* Finom mozgás a háttérfényeken */
    document.addEventListener("mousemove", (event) => {

        const x = (event.clientX / window.innerWidth - 0.5);
        const y = (event.clientY / window.innerHeight - 0.5);

        const glow1 = document.querySelector(".header-glow-1");
        const glow2 = document.querySelector(".header-glow-2");

        if (glow1) {
            glow1.style.transform =
                `translate(${x * 22}px, ${y * 18}px)`;
        }

        if (glow2) {
            glow2.style.transform =
                `translate(${x * -12}px, ${y * -10}px)`;
        }
    });

});