Back to library
INTERACTION_124

Mega Menu Reveal.

A wide panel drops open with its columns cascading. Panel height 0 with columns at 0 opacity and 8px up before the trigger; expanding the panel then fading the columns down into place once hover intent of 120ms or keyboard activation.

CATEGORY
Navigation
COMPLEXITY
Intermediate
TECH
CSS
PLATFORM
Both
PERFORMANCE
Light
LIVE PLAYGROUND
HomeWorkPricing
CSS / CSS
/* Mega Menu Reveal — A wide panel drops open with its columns cascading. */
.mega-menu-reveal {
  --dur: 380ms;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
  --stagger: 50ms;
  will-change: transform, opacity;
}

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

/* panel height 0 with columns at 0 opacity and 8px up -> expanding the panel then fading the columns down into place */
@keyframes mega-menu-reveal-in {
  to {
    opacity: 1;
    transform: none;
    filter: none;
  }
}

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

/** Mega Menu Reveal — trigger: hover intent of 120ms or keyboard activation */
export function MegaMenuReveal({ 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="mega-menu-reveal" data-state="out">
      {children}
    </div>
  );
}

IF YOU LIKE THIS, STEAL THESE TOO.

Home
Work
Pricing
INTERACTION_118CSS

Fullscreen Navigation Reveal

A full-screen overlay wipes down and oversized links rise in.

Navigation / LightView
Home
Work
Pricing
INTERACTION_117CSS

Animated Mobile Menu

The panel slides in and links cascade behind it.

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