All Prompts
All Prompts

herosectiontailwindanimatedparallaxlandingresponsive
Cinematic Hero Section with Parallax Blinds
Кинематографичный Hero Section с параллакс-шторками. Адаптивный UI-компонент на Tailwind CSS для лендингов и брендинга.
Prompt
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<title>AEX | Hero Only</title>
<script src="https://cdn.tailwindcss.com"></script>
<!-- Fonts (required for the look) -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Oswald:wght@500;600&family=Playfair+Display:ital@0;1&display=swap"
rel="stylesheet" />
<style>
body {
font-family: "Inter", sans-serif;
}
.font-display {
font-family: "Oswald", sans-serif;
}
.font-accent {
font-family: "Playfair Display", serif;
}
/* Optional scrollbar (same as original) */
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #ebedea;
}
::-webkit-scrollbar-thumb {
background: #3F556B;
}
/* REQUIRED: hero uses animationIn in utility brackets */
@keyframes animationIn {
0% {
opacity: 0;
transform: translateY(30px);
filter: blur(8px);
}
100% {
opacity: 1;
transform: translateY(0);
filter: blur(0px);
}
}
</style>
</head>
<body class="bg-[#ebedea] text-[#2d322f] antialiased selection:bg-[#3F556B] selection:text-white overflow-x-hidden">
<!-- Optional: Noise overlay (part of the vibe) -->
<div class="fixed inset-0 pointer-events-none z-[100] opacity-[0.035] mix-blend-multiply"
style="background-image:url('data:image/svg+xml,%3Csvg viewBox=%220 0 200 200%22 xmlns=%22http://www.w3.org/2000/svg%22%3E%3Cfilter id=%22noiseFilter%22%3E%3CfeTurbulence type=%22fractalNoise%22 baseFrequency=%220.85%22 numOctaves=%223%22 stitchTiles=%22stitch%22/%3E%3C/filter%3E%3Crect width=%22100%25%22 height=%22100%25%22 filter=%22url(%23noiseFilter)%22/%3E%3C/svg%3E');">
</div>
<!-- HERO ONLY (from your file) -->
<main>
<section class="relative w-full py-20 lg:py-28 overflow-hidden">
<!-- FULL-WIDTH B&W BACKGROUND -->
<div class="absolute inset-0 z-0 pointer-events-none">
<img
src="https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/4024eb96-6b8f-4f13-99f1-f1889425c4e5_3840w.jpg?w=800&q=80"
class="w-full h-full object-cover grayscale opacity-100 scale-[1.06]"
alt=""
/>
<div class="absolute inset-0 bg-[#ebedea]/55"></div>
<div class="absolute inset-0 bg-gradient-to-r from-[#ebedea]/70 via-transparent to-[#ebedea]/50"></div>
</div>
<!-- CONTENT CONTAINER -->
<div class="relative z-10 max-w-[1400px] mx-auto px-6 lg:px-12">
<div class="flex flex-col lg:flex-row gap-12 lg:gap-16 items-center">
<!-- Left -->
<div class="w-full lg:w-[45%] flex flex-col items-end order-2 lg:order-1 text-right relative py-16">
<h1 class="relative flex flex-col items-end w-full">
<span class="font-display uppercase font-semibold tracking-tighter leading-[0.85] text-[#2d322f] text-[5.25rem] md:text-[7.25rem] lg:text-[9.5rem] [animation:animationIn_1.2s_ease-out_0.2s_both]">
CONQUER
</span>
<span class="font-display uppercase font-semibold tracking-tighter leading-[0.85] text-[#2d322f] text-[5.75rem] md:text-[7.75rem] lg:text-[10.5rem] [animation:animationIn_1.2s_ease-out_0.4s_both]">
UNKNOWN
</span>
<span class="pointer-events-none absolute -right-2 top-1/2 -translate-y-[55%] border border-[#2d322f]/45 bg-[#3F556B] px-2 py-1 text-[25px] md:text-xs font-semibold uppercase text-white tracking-[0.35em] [animation:animationIn_0.8s_ease-out_0.8s_both]">
THE
</span>
</h1>
<p
class="font-accent italic text-lg md:text-xl text-[#3F556B] mt-10 mb-4 pr-2 [animation:animationIn_0.8s_ease-out_1s_both]">
Where the wild goes quiet.
</p>
<button class="bg-[#2d322f] text-white px-10 py-4 text-xs font-semibold uppercase tracking-widest hover:bg-[#3F556B] transition-colors duration-300 mt-12 mr-2 [animation:animationIn_0.8s_ease-out_1.2s_both]">
Enter The Terrain
</button>
</div>
<!-- Right (Blinds) -->
<div
class="w-full lg:w-[115%] lg:translate-x-[3%] h-[500px] lg:h-[750px] flex items-center gap-1 lg:gap-1.5 overflow-visible relative group order-1 lg:order-2">
<div
class="w-[18%] h-[80%] -translate-y-4 relative overflow-hidden bg-[#1e2420] shadow-lg z-10 rounded-[1px]">
<div
class="absolute inset-x-0 -top-[30%] h-[160%] scale-[1.15] bg-no-repeat bg-[url('https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/3bbe5cf4-acf8-430e-9b9b-2d44d8b90f0c_3840w.webp')] js-hero-blind will-change-transform"
style="background-size: 500% 100%; background-position: 0% 50%;"></div>
</div>
<div
class="w-[22%] h-[95%] translate-y-1 relative overflow-hidden bg-[#1e2420] shadow-xl z-20 rounded-[1px]">
<div
class="absolute inset-x-0 -top-[30%] h-[160%] scale-[1.15] bg-no-repeat bg-[url('https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/3bbe5cf4-acf8-430e-9b9b-2d44d8b90f0c_3840w.webp')] js-hero-blind will-change-transform"
style="background-size: 500% 100%; background-position: 25% 50%;"></div>
</div>
<div
class="w-[28%] h-[110%] -translate-y-2 relative overflow-hidden bg-[#1e2420] shadow-2xl z-30 rounded-[1px]">
<div
class="absolute inset-x-0 -top-[30%] h-[160%] scale-[1.15] bg-no-repeat bg-[url('https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/3bbe5cf4-acf8-430e-9b9b-2d44d8b90f0c_3840w.webp')] js-hero-blind will-change-transform"
style="background-size: 500% 100%; background-position: 50% 50%;"></div>
</div>
<div
class="w-[22%] h-[95%] translate-y-1 relative overflow-hidden bg-[#1e2420] shadow-xl z-20 rounded-[1px]">
<div
class="absolute inset-x-0 -top-[30%] h-[160%] scale-[1.15] bg-no-repeat bg-[url('https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/3bbe5cf4-acf8-430e-9b9b-2d44d8b90f0c_3840w.webp')] js-hero-blind will-change-transform"
style="background-size: 500% 100%; background-position: 75% 50%;"></div>
</div>
<div
class="w-[18%] h-[80%] -translate-y-4 relative overflow-hidden bg-[#1e2420] shadow-lg z-10 rounded-[1px]">
<div
class="absolute inset-x-0 -top-[30%] h-[160%] scale-[1.15] bg-no-repeat bg-[url('https://hoirqrkdgbmvpwutwuwj.supabase.co/storage/v1/object/public/assets/assets/3bbe5cf4-acf8-430e-9b9b-2d44d8b90f0c_3840w.webp')] js-hero-blind will-change-transform"
style="background-size: 500% 100%; background-position: 100% 50%;"></div>
</div>
</div>
</div>
</div>
</section>
<!-- Optional spacer so you can scroll and see parallax -->
<section class="h-[120vh]"></section>
</main>
<!-- HERO parallax only (trimmed to blinds, same logic) -->
<script>
document.addEventListener("DOMContentLoaded", () => {
const blinds = document.querySelectorAll(".js-hero-blind");
let lastKnownScrollPosition = 0;
let ticking = false;
function doParallax(scrollPos) {
if (scrollPos < 1200) {
blinds.forEach((blind, index) => {
const distanceFromCenter = Math.abs(2 - index);
const baseSpeed = 0.028;
const stagger = distanceFromCenter * 0.02;
const yMoveRaw = scrollPos * (baseSpeed + stagger);
const yMoveClamped = Math.max(-180, Math.min(yMoveRaw, 180));
blind.style.transform = `translate3d(0, ${yMoveClamped}px, 0)`;
});
}
}
window.addEventListener(
"scroll",
() => {
lastKnownScrollPosition = window.scrollY;
if (!ticking) {
window.requestAnimationFrame(() => {
doParallax(lastKnownScrollPosition);
ticking = false;
});
ticking = true;
}
},
{ passive: true }
);
doParallax(window.scrollY);
});
</script>
</body>
</html>