Back to Dictionary
Scroll & Navigation
●●○Customize
Context dependentScroll Reveal / Fade-Up on Scroll
Elements remain hidden until they enter the browser viewport, then smoothly fade in and slide up into position. Makes scrolling feel like an active discovery process.
Use
Feature sections on long marketing landing pages
Avoid
Critical navigation or header elements
Safer Alternative
No safer default listed.
Risk Level
Low risk
Live Demo
Scroll down to reveal elements
Keep scrolling...
What It Is
Elements remain hidden until they enter the browser viewport, then smoothly fade in and slide up into position. Makes scrolling feel like an active discovery process.
✓When to Use
- Feature sections on long marketing landing pages
- About pages introducing team members or values
- Article content to pace the reading experience
- To prevent the user from being overwhelmed by a dense page
✕When NOT to Use
- Critical navigation or header elements
- Dense data dashboards or tables
- Content that requires immediate reading upon fast scroll
Configuration Tips
- 01Set viewport margin to trigger somewhat before the element is fully visible (e.g., once 20% is in view)
- 02Add slight stagger delay (0.1s) to adjacent elements revealing simultaneously
- 03Only run the animation once (triggerOnce: true) so it doesn't re-trigger when scrolling up
You've Seen It In
AppleStripeLinearArc Browser
AI Implementation Prompts
Move from a fast scaffold to production details, then tune timing and edge states.
Make my landing page sections fade in and slide up smoothly as I scroll down the page.
Code Example (Tailwind CSS)
A focused implementation sketch you can adapt to your product state.
'use client';
import { motion } from 'framer-motion';
import { ReactNode } from 'react';
export function ScrollReveal({
children,
delay = 0
}: {
children: ReactNode;
delay?: number;
}) {
return (
<motion.div
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-100px" }}
transition={{
duration: 0.7,
delay: delay,
ease: [0.21, 0.47, 0.32, 0.98] "text-stone-400 italic">// custom smooth ease out
}}
>
{children}
</motion.div>
);
}