Kinetic UI
Back to Introduction
Marquees

Vertical Ticker Wall

An infinite vertical scrolling wall composed of multiple independent columns moving at staggered speeds and directions.

Quick Actions
CLI Installation
npx kinetic-ui-cli@latest add vertical-ticker
Vertical Ticker Wall
Alice

Alice

@alice

Bob

Bob

@bob

Charlie

Charlie

@charlie

Diana

Diana

@diana

Ethan

Ethan

@ethan

Fiona

Fiona

@fiona

George

George

@george

Alice

Alice

@alice

Bob

Bob

@bob

Charlie

Charlie

@charlie

Diana

Diana

@diana

Ethan

Ethan

@ethan

Fiona

Fiona

@fiona

George

George

@george

Alice

Alice

@alice

Bob

Bob

@bob

Charlie

Charlie

@charlie

Diana

Diana

@diana

Ethan

Ethan

@ethan

Fiona

Fiona

@fiona

George

George

@george

Alice

Alice

@alice

Bob

Bob

@bob

Charlie

Charlie

@charlie

Diana

Diana

@diana

Ethan

Ethan

@ethan

Fiona

Fiona

@fiona

George

George

@george

Community Driven

Join thousands of developers worldwide.

Installation

npx kinetic-ui-cli@latest add vertical-ticker

Usage

import { VerticalTickerWall, VerticalTickerColumn } from "@/components/creative/vertical-ticker";

export default function Page() {
  return (
    <div className="h-[600px] overflow-hidden">
      <VerticalTickerWall className="rotate-[-5deg] scale-110">
        
        {/* Column 1 (Scrolls UP at speed 2) */}
        <VerticalTickerColumn speed={2} direction={-1}>
          <div className="h-40 bg-zinc-900 mb-4 rounded-xl" />
          <div className="h-40 bg-zinc-900 mb-4 rounded-xl" />
        </VerticalTickerColumn>
        
        {/* Column 2 (Scrolls DOWN at speed 1.5) */}
        <VerticalTickerColumn speed={1.5} direction={1}>
          <div className="h-40 bg-zinc-900 mb-4 rounded-xl" />
          <div className="h-40 bg-zinc-900 mb-4 rounded-xl" />
        </VerticalTickerColumn>
        
      </VerticalTickerWall>
    </div>
  );
}

How it works

The VerticalTickerWall acts as a Flexbox container for multiple VerticalTickerColumn components. Each column utilizes an independent Framer Motion useAnimationFrame loop to translate its items vertically.

To achieve an infinite loop without cloning DOM nodes arbitrarily, the columns expect you to duplicate your item list at least once (i.e. {items}{items}). The loop maps the Y translation precisely from 0% to -50%. As soon as it hits -50%, it seamlessly snaps back to 0%.

[!TIP] This component pairs incredibly well with CSS mix-blend-mode: screen and -5deg rotation for a modern hero section background.

Usage Guide

1. Import the Component

Import the component into your React or Next.js page:

import { VerticalTicker } from "@/components/creative/vertical-ticker";

2. Implementation Example

Render the component and customize its behavior by passing props:

import { VerticalTicker } from "@/components/creative/vertical-ticker";

export default function Example() {
  return (
    <div className="w-full flex items-center justify-center p-8">
      <VerticalTicker
      >
        <div>Content goes here</div>
      </VerticalTicker>
    </div>
  );
}
Performance Notes
  • Uses CSS hardware acceleration via GPU transform-binds.
  • Damped interpolation minimizes paint-redraw flashes.
  • Tree-shakable import: only compiles elements requested.
Accessibility Notes
  • Full keyboard focus-ring navigation support (`Tab`/`Shift+Tab`).
  • ARIA roles mapped correctly for assistive screen readers.
  • Respects `prefers-reduced-motion` system toggles.