Fejlécek
Éjféli elegancia
Élő előnézet – a komponens teljes méretben.
Élő előnézet
HTML · CSS · JS
<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>
@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;
}
}
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)`;
}
});
});