Counter Columns

A model in wide striped trousers leaning on a teal wallA glass perfume bottle casting amber shadows on warm paperA woman in a dark check coat walking down a city streetOrange poppies against a clear blue skyA singer with one hand raised in stage smoke and red light
A model in a bright yellow fleece set on a concrete courtA red swing carousel spinning against a pale skyA woman with short hair looking back over her shoulderA dropper bottle of golden oil on a round wooden boardA model in a red jersey and black jacket against a teal sky
About this component

Counter Columns

A wall of photographic prints tipped back in perspective, with tall columns drifting endlessly in opposite directions at slightly different paces. Scrolling the page pushes the columns and the push eases away, hovering slows the wall almost to a stop, and the whole plane leans gently toward the cursor. The loop is seamless at any size, and column count, pace, tilt, spacing and the top and bottom fade are all props. Reduced motion shows a still, staggered wall.

Usage

The import and the props worth knowing about, in one place.

import { CounterColumns } from "@/components/beste/component/counter-columns";

<CounterColumns
  className="h-[40rem]"
  images={[
    { src: "https://images.unsplash.com/photo-1509631179647-0177331693ae?w=900&q=80", alt: "A model leaning on a teal wall" },
    { src: "https://images.unsplash.com/photo-1490750967868-88aa4486c946?w=900&q=80", alt: "Orange poppies against a blue sky" },
    { src: "https://images.unsplash.com/photo-1485968579580-b6d095142e6e?w=900&q=80", alt: "A woman walking down a city street" },
  ]}
  columns={3}
  tilt={0.6}
  speed={1}
/>

Props

Read from the component's own type, so this cannot drift from what it accepts.

PropTypeDefaultDescription
images*CounterColumnsImage[]—Photographs spread across the columns; fewer than the columns need are repeated.
columnsnumber—Number of columns on wider screens; phones show at most two.
speednumber—Pace of the drift.
tiltnumber—How far the wall leans back and turns, 0 (flat) to 1.
gapnumber—Space between prints, in pixels.
fadenumber—Height of the soft fade at the top and bottom, 0 to 0.4 of the frame.
interactiveboolean—Hovering slows the wall, the page scroll pushes it and the wall leans toward the cursor.
pausedboolean—Stop the drift.
classNamestring—

More Media components

View all Media
Swimmers seen from above near a rocky shoreline

Low tide

Chet Baker, 2023

A pebble beach curving along a turquoise bay

The long bay

Nina Simone, 2022

Swimmers in a narrow rocky bay below pine trees

Under the pines

Miles Davis, 2024

A deep turquoise inlet between two cliffs

Inlet

Joni Mitchell, 2024

A limestone cove with clear green water

Green water

Bill Evans, 2023

Built around the light.

Curved white bands of a building rising around an opening of blue sky