CrazyGLCrazyGLHomeExploreGitHubBrowse heroesLoading hero…← Back to gallery@crazygl/magazine-cover-product

Magazine Cover Product Hero

A product visual plays like a moving magazine cover, with large type sharing the frame and layered imagery adding subtle editorial depth.

ReactWebGL3DImageInteractiveFont#three#3d#layers#screenshot#depth#parallax#design#editorial#portfolio

Usage

import MagazineCoverProductHero from '@crazygl/hero-magazine-cover-product';

export default function Page() {
  return (
    <MagazineCoverProductHero
      heading={"Issue\nNo. 01"}
      backgroundImage="https://example.com/cover.jpg"
      layer1Image="https://example.com/cutout.png"
      overallRotation={4}
    />
  );
}

Provide a background image (full-frame base) and up to three layer images (Layer 1–3; a transparent PNG lets cut-out subjects float cleanly). Leave a layer's image empty to hide it.

Customise

  • Layers — per layer X / Y / Z (depth) / Scale. Spread the three Z values across ~0–1 for clear front-to-back depth.
  • OveralloverallOffsetX/Y, overallScale, overallRotation (tilt the whole set; default 4°).
  • MotionloadDelay (entrance cascade), hoverSpread (pop on hover), cameraParallax (pointer-driven camera sweep).
  • LayoutcontentAlign, paddingX/Y, heading font.

Best for

  • Fashion and beauty launches where typography should feel as important as the product.
  • Studio and agency portfolios, campaign pages, and print-inspired editorial sites.
  • App and SaaS pages that want to show screenshots with depth instead of a flat mockup.
01 · Install the package

One command, zero config.

npm install @crazygl/hero-magazine-cover-product
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 MagazineCoverProductHero from '@crazygl/hero-magazine-cover-product';

export default function Landing() {
  return (
    <MagazineCoverProductHero />
  );
}
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 MagazineCoverProductHero from '@crazygl/hero-magazine-cover-product';

export default function Page() {
  return (
    <section>
      <MagazineCoverProductHero
        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

Torn Poster Hero

Layered torn posters build a premium campaign collage with depth, shadows, and a subtle peel-away motion.

Screenshot Torn Into Layers

A background screenshot plus up to five overlay images, each placed on its own depth plane with X / Y / Z / scale controls. On load each layer slides in from depth with a staggered easeOutBack overshoot; hover spreads them further apart along Z.

Collage in Zero Gravity

Images, textures, and product screens float together in a controlled zero-gravity collage around the hero copy.

Cinematic Contact Sheet

Multiple frames behave like a cinematic contact sheet, bending through depth and holding a warm editorial mood.

Draggable Portfolio Cards

Portfolio cards float behind the headline and can be dragged with momentum, making the hero feel tactile and playful.

Exhibition Poster Hero

A single campaign image becomes a 3D museum poster with soft paper folds, a slow specular light sweep across the surface, and a film-grade animated grain. Slow camera drift and pointer parallax keep it breathing.
Live customizer

Magazine Cover Product Hero

Overall X offset-0.35worldHorizontal position of the entire screenshot set (background + all layers). 0 = centered.Overall Y offset0.05worldVertical position of the entire screenshot set.Overall scale1Scale multiplier for the entire screenshot set.Overall rotation4°Rotation of the entire screenshot set around its center.Background imageFull-frame image rendered on a fixed plane behind every layer.ImageLeave empty to hide this layer.X2worldHorizontal position of this layer. 0 = centered.Y-0.55worldVertical position of this layer. 0 = centered.Scale0.35Size of this layer. At 1.0 it fits the background.Z (depth)0.05Depth offset. Higher = closer to camera.ImageLeave empty to hide this layer.X0.4worldHorizontal position of this layer. 0 = centered.Y0.7worldVertical position of this layer. 0 = centered.Scale0.2Size of this layer. At 1.0 it fits the background.Z (depth)0.5Depth offset. Higher = closer to camera.ImageLeave empty to hide this layer.X-0.5worldHorizontal position of this layer. 0 = centered.Y-0.05worldVertical position of this layer. 0 = centered.Scale0.25Size of this layer. At 1.0 it fits the background.Z (depth)0.85Depth offset. Higher = closer to camera.Load stagger0.25s/layerStaggered delay between each layer's entrance. 0 = simultaneous, 0.15 = classic cascade.Hover spread1.48How much the layers push apart on hover. 1 = no spread, 1.5 = pleasant pop.Camera parallax0.9Pointer-driven camera offset. 0 = locked, 1 = aggressive, 3 = exaggerated parallax sweep.Heading fontInteractivityWhich input drives the hero — try Scroll if you want the page to drive motion.
CrazyGL · crazygl.comProgrammable hero sections for real websites.