startermotion.
← All templates

Entrance

Reveal on Scroll

A line-by-line mask reveal that plays as the element enters the viewport. The clip and easing are tuned so text settles with weight instead of sliding flatly. Drop it around any block of copy or media.

What's included

  • React component (Framer Motion)
  • Framework-free CSS keyframes
  • Source Figma file with the timed prototype

The code

npm install motion
"use client";

import { motion } from "motion/react";

export function Reveal({ children }: { children: React.ReactNode }) {
  return (
    <span style={{ display: "inline-block", overflow: "hidden" }}>
      <motion.span
        initial={{ y: "110%" }}
        whileInView={{ y: 0 }}
        viewport={{ once: true, margin: "-10% 0px" }}
        transition={{ duration: 0.8, ease: [0.16, 1, 0.3, 1] }}
        style={{ display: "inline-block" }}
      >
        {children}
      </motion.span>
    </span>
  );
}

Dependencies: motion