CrazyGLCrazyGLHomeExploreGitHubBrowse heroesLoading hero…← Back to gallery@crazygl/masked-text-carousel

Masked Text Carousel

A big heading sits behind a product image; where the image overlaps the words the text shows only its outline (or inverts, or ghosts) while the rest stays solid — the product literally masks the type. Swipeable, with a floating, pointer-reactive product and smooth slide transitions.

ReactImageInteractiveFont#carousel#text#mask#outline#product#typography#slider#swipe

Usage

import MaskedTextCarousel from '@crazygl/hero-masked-text-carousel';

export default function Hero() {
  return (
    <MaskedTextCarousel
      slideCount={2}
      slide1Image="/sneaker-1.png"
      slide1Heading="VELOCITY"
      slide1Caption="01 — Aero"
      slide2Image="/sneaker-2.png"
      slide2Heading="MOMENTUM"
      maskEffect="outline"
    />
  );
}

Customise

  • SlidesslideCount (1–5) and per-slide slideNImage (transparent PNG), slideNHeading, slideNCaption.
  • Mask effectmaskEffect (outline / invert / ghost), strokeColor, strokeWidth.
  • Motiontransition (fade/slide/zoom), duration, easing, imageFloat, pointerParallax, autoplay, interval.
  • StylebgTop/bgBottom, textColor, accentColor, headingFont, headingWeight, showArrows, showDots, showCaption.

Best for

  • Sneaker / product launches and e-commerce hero sliders.
  • Fashion and lifestyle brands with bold one-word headlines.
  • Portfolio / lookbook carousels where the product is the focus.
01 · Install the package

One command, zero config.

npm install @crazygl/hero-masked-text-carousel
02 · Render the component

Import once, drop it in.

The component takes the same props you see in the live customizer on the right — every default ships poster-quality.

hero.tsx
import MaskedTextCarousel from '@crazygl/hero-masked-text-carousel';

export default function Landing() {
  return (
    <MaskedTextCarousel />
  );
}
03 · Use it in a page

SSR-safe by default.

The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.

page.tsx
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';

import MaskedTextCarousel from '@crazygl/hero-masked-text-carousel';

export default function Page() {
  return (
    <section>
      <MaskedTextCarousel
        heading="Say hi."
        subheading="Your new hero."
      />
      <article>
        <h2>Welcome</h2>
        <p>Your content keeps its own voice below the hero.</p>
      </article>
    </section>
  );
}
You might also like

Similar heroes

Product Carousel

A centred showcase carousel for transparent product PNGs — the active product sits front and large while the previous and next peek in from the sides, dimmed and scaled. Swipe, drag, arrows or dots; products swing into frame with captions that animate in.

Text Masking

Headline acts as a window onto a slowly drifting photograph — large letterforms, the photograph showing through them, a clean colored hero around the cut-out.

Text Reveal

Heading wiped in from a single direction via a hard clip-path mask, with a small per-letter delay — the foundational reveal everyone needs.

Mask Text Reveal

Text revealed as a moving circular mask sweeps across — the headline appears only where the image-shaped mask uncovers it.

Collection Carousel

Product cards float in a curved 3D carousel. The center card is large and sharp; cards rotating toward the sides shrink, dim and blur into depth. Auto-rotates slowly, drag to spin with momentum, click a side card to bring it to center.

Gallery Slider

A full-bleed image gallery where each slide carries its own picture and copy. Image and text transition independently — fade, Ken-Burns zoom, push-slide, clip wipe or blur-morph for the image; fade, rise, clip-reveal or blur for the text. Autoplay, arrows, dots, counter, swipe.
Live customizer

Masked Text Carousel

Slides3Slide 1 PNGSlide 1 headingSlide 1 captionSlide 2 PNGSlide 2 headingSlide 2 captionSlide 3 PNGSlide 3 headingSlide 3 captionEffect over imageOutline colourOutline width2pxSlide transitionDuration0.8sEasingFloat imagePointer parallax0.6AutoplayInterval4.5sBackdrop topBackdrop bottomText colourAccentHeading fontHeading weight800ArrowsDotsCaptionInteractivityWhich input drives the hero — try Scroll if you want the page to drive motion.
CrazyGL · crazygl.comProgrammable hero sections for real websites.