Back to library
INTERACTION_118

Fullscreen Navigation Reveal.

A full-screen overlay wipes down and oversized links rise in. The overlay scaled to 0 from the top, links masked below before the trigger; scaling the overlay down over 480ms, then revealing masked links once activating the menu control.

CATEGORY
Navigation
COMPLEXITY
Intermediate
TECH
CSS
PLATFORM
Both
PERFORMANCE
Light
LIVE PLAYGROUND
Home
Work
Pricing
CSS / CSS
/* Fullscreen Navigation Reveal — A full-screen overlay wipes down and oversized links rise in. */
.fullscreen-navigation-reveal {
  --dur: 480ms;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --stagger: 70ms;
  will-change: transform, opacity;
}

.fullscreen-navigation-reveal > * {
  opacity: 0;
  transform: translateY(14px);
  animation: fullscreen-navigation-reveal-in var(--dur) var(--ease) forwards;
  animation-delay: calc(var(--i, 0) * var(--stagger));
}

/* the overlay scaled to 0 from the top, links masked below -> scaling the overlay down over 480ms, then revealing masked links */
@keyframes fullscreen-navigation-reveal-in {
  to {
    opacity: 1;
    transform: none;
    filter: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .fullscreen-navigation-reveal > * {
    opacity: 1;
    transform: none;
    animation: none;
  }
}
React / TSX
import { useEffect, useRef } from "react";

/** Fullscreen Navigation Reveal — trigger: activating the menu control */
export function FullscreenNavigationReveal({ children }: { children: React.ReactNode }) {
  const ref = useRef<HTMLDivElement>(null);

  useEffect(() => {
    const el = ref.current;
    if (!el) return;
    if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
      el.dataset["state"] = "in";
      return;
    }
    const io = new IntersectionObserver(
      ([entry]) => {
        if (entry?.isIntersecting) {
          el.dataset["state"] = "in";
          io.unobserve(el);
        }
      },
      { threshold: 0.2 },
    );
    io.observe(el);
    return () => io.disconnect();
  }, []);

  return (
    <div ref={ref} className="fullscreen-navigation-reveal" data-state="out">
      {children}
    </div>
  );
}

IF YOU LIKE THIS, STEAL THESE TOO.

HomeWorkPricing
INTERACTION_124CSS

Mega Menu Reveal

A wide panel drops open with its columns cascading.

Navigation / LightView
INTERACTION_123CSS + JS

Floating Dock

Dock icons scale with pointer proximity like a desktop dock.

Navigation / LightView
DISCOVEREFFECTSPROMPTS
INTERACTION_027CSS

Navigation Underline

Underline grows from the origin side on hover.

Navigation / LightView
Home
Work
Pricing
INTERACTION_117CSS

Animated Mobile Menu

The panel slides in and links cascade behind it.

Navigation / LightView