Building Scroll-Linked Parallax Effects in Pure Tailwind and Vanilla JavaScript
Parallax scrolling — where elements move at different speeds relative to scrolling — can make a website feel deeply dynamic. Most people use heavy libraries like GSAP for this. But today, we’ll build a clean, efficient scroll-linked parallax effect with just Tailwind CSS and vanilla JavaScript. No external dependencies. Why Go Pure? Benefits include: Massively reduced page weight Customizable to any design system Better performance for mobile users Step 1: Create Your Layers Each parallax layer gets a basic Tailwind setup: Scroll Down Step 2: Basic JavaScript for Parallax This snippet calculates parallax based on scroll position: const parallaxEls = document.querySelectorAll('[data-parallax]'); window.addEventListener('scroll', () => { const scrollTop = window.pageYOffset; parallaxEls.forEach(el => { const speed = parseFloat(el.getAttribute('data-speed')); el.style.transform = `translateY(${scrollTop * speed}px)`; }); }); Step 3: Tuning Speeds Per Layer You can assign different speeds to different layers with data-speed. Smaller values (e.g., 0.1) move slower (background feel), larger values (e.g., 0.6) move faster (foreground feel). Bonus: Smoother Motion with requestAnimationFrame For buttery smoothness, swap in a rAF loop instead of basic scroll event: let latestScroll = 0; let ticking = false; window.addEventListener('scroll', () => { latestScroll = window.pageYOffset; if (!ticking) { window.requestAnimationFrame(() => { parallaxEls.forEach(el => { const speed = parseFloat(el.getAttribute('data-speed')); el.style.transform = `translateY(${latestScroll * speed}px)`; }); ticking = false; }); ticking = true; } }); Pros and Cons ✅ Pros No libraries — maximum control and minimal load time Fully responsive and easy to tweak per element Compatible with Tailwind’s utility-first workflow ⚠️ Cons Manual math if you want more complex motion curves Very fast scrolls might cause tiny visual tearing without fine-tuning
Parallax scrolling — where elements move at different speeds relative to scrolling — can make a website feel deeply dynamic. Most people use heavy libraries like GSAP for this. But today, we’ll build a clean, efficient scroll-linked parallax effect with just Tailwind CSS and vanilla JavaScript. No external dependencies.
Why Go Pure?
Benefits include:
- Massively reduced page weight
- Customizable to any design system
- Better performance for mobile users
Step 1: Create Your Layers
Each parallax layer gets a basic Tailwind setup:
Scroll Down
Step 2: Basic JavaScript for Parallax
This snippet calculates parallax based on scroll position:
Step 3: Tuning Speeds Per Layer
You can assign different speeds to different layers with data-speed
. Smaller values (e.g., 0.1) move slower (background feel), larger values (e.g., 0.6) move faster (foreground feel).
Bonus: Smoother Motion with requestAnimationFrame
For buttery smoothness, swap in a rAF loop instead of basic scroll event:
Pros and Cons
✅ Pros
- No libraries — maximum control and minimal load time
- Fully responsive and easy to tweak per element
- Compatible with Tailwind’s utility-first workflow
⚠️ Cons
- Manual math if you want more complex motion curves
- Very fast scrolls might cause tiny visual tearing without fine-tuning