Helix Ribbon

A scroll-driven cylindrical helix of images that curve, climb and rotate through the viewport — pure CSS 3D, no WebGL.

1.2k

copies

Image preview

Live preview

Abstract dark glass form
Preview

About this component

Helix Ribbon lays your images along a cylindrical helix and drives the whole
strip with scroll. The ribbon rises into frame from below, coils past the
camera with each card turning to follow the curve, and climbs out through the
top — then plays exactly backwards when you scroll up.

Every card genuinely bends with the cylinder rather than sitting on it as a
flat rectangle, so the strip reads as one continuous curved surface instead of
a row of tiles. It is built entirely from CSS 3D transforms: no WebGL, no
canvas, and nothing to install — Framer already ships everything it needs.

The camera is matched to a real perspective camera rather than eyeballed, so
the scene scales with the viewport the way a 3D scene should, and depth fog
fades the far end of the coil into your background colour.

The strip is finite. It is exactly as long as your image list, with a real
first and last card, and the travel is solved from the geometry so the ribbon
sits fully below the frame at the start of the scroll and fully above it at
the end. Nothing is generated to pad it out and nothing repeats unless you ask.

Key features

True cylindrical helix — cards ride a parametric curve and are oriented
by a moving frame, so their edges stay welded together through the twist.

  • Images that bend — each card is cut into slices along the arc, so the
    artwork curves with the cylinder instead of sitting flat across it.

  • Fully scroll-scrubbed — nothing is a one-shot animation, so scrolling up
    plays the exact inverse of scrolling down.

  • Finite ribbon with real ends — as long as your image list, entering from
    below the frame and exiting through the top. No filler, no repeats.

  • Auto-solved entry and exit — travel and start position are derived from
    the geometry, so the ends always clear the frame.

  • Readable from behind — the far wall of the coil shows your artwork the
    right way round, not mirrored.

  • Hover zoom — cards scale and lift off the coil under the cursor, on a
    time-based ease that leaves rest gently and settles back in.

  • Per-card captions — optional, always on or on hover, scaling with the
    scene rather than fixed in pixels.

  • Per-card links — real anchors, so keyboard focus, right-click and
    Framer's own page routing all work.

  • Matched perspective camera — FOV and camera distance behave like a real
    3D camera and recompute on resize.

  • Depth fog — distant cards fade into your background colour.

  • Solid or gradient background, with a separate fog colour.

  • Respects prefers-reduced-motion — falls back to a plain responsive grid.

  • Designable on canvas — freeze the scroll at any moment to lay out around it.

API reference

API reference

Setup

Place the component on a page inside a normal (non-absolute) stack.

Layer setting

Value

Width

Fill

Height

Fixed, 8000 to start

The layer's height is the scroll budget — taller means slower. position: sticky
needs a scrolling ancestor, so it must not sit in an absolutely-positioned frame.

Images

An array. Each entry has:

Field

Type

Description

image

ResponsiveImage

The artwork.

caption

String

Optional label drawn on the card.

link

Link

Optional destination. Clicking the card navigates.

Property

Type

Default

Range

Description

repeat

Number

1

1–10

How many times the list runs along the ribbon. 1 = exactly your images, with a real first and last card.

Entry / exit

Property

Type

Default

Range

Description

autoFit

Boolean

true

—

Auto solves Travel and Start so the strip begins fully below the frame and ends fully above it. Switch to Manual to set them by hand.

scrollTravel

Number

3.5

0.5–20

Turns the ribbon slides along the curve across the scroll. Manual only.

startOffset

Number

4.5

−10–10

Turns to shift the strip back at scroll 0. Manual only.

The coil

Property

Type

Default

Range

Description

helixRadius

Number

3.2

0.5–12

Cylinder radius, in world units.

helixPitch

Number

3.8

−12–12

Vertical climb per full turn. Pitch minus Panel H is the visible gap between coils — raise it to stretch the spring open.

panelWidth

Number

2.2

0.1–6

Card width.

panelHeight

Number

1.2375

0.1–8

Card height. For a given width, 16:9 is W × 0.5625.

panelGap

Number

0

0–3

Space between cards along the arc. 0 welds the edges into one unbroken ribbon.

curveSegments

Number

8

1–24

Slices each image is cut into along the arc. 1 is a flat rectangle; higher bends the artwork with the cylinder.

Camera

Property

Type

Default

Range

Description

cameraZ

Number

10

2–40

Camera distance.

fov

Number

45

10–110

Vertical field of view, in degrees.

yOffset

Number

-2.5

−12–12

Shifts the coil vertically in world space.

zOffset

Number

-1.2

−12–12

Shifts the coil toward or away from the camera.

Surface

Property

Type

Default

Description

backFace

Enum

readable

What the far side of the coil shows. Readable repeats the artwork the right way round, Mirror reverses it, Hidden drops it.

seamStroke

Number

2

Hairline on each card edge, marking the joints. 0 for none.

seamColor

Color

rgba(255,255,255,0.2)

Seam colour.

Hover

Property

Type

Default

Range

Description

hoverScale

Number

1.08

1–1.6

Scale a card grows to under the cursor. 1 turns hover off.

hoverLift

Number

0.18

0–2

How far the hovered card rises off the cylinder, so it clears its neighbours.

hoverDuration

Number

0.45

0.05–2

Seconds the zoom takes to reach full size, and to settle back.

Captions

Property

Type

Default

Range

Description

captionMode

Enum

always

—

Off, Always, or On hover.

captionSize

Number

0.1

0.03–0.3

Text size as a share of card height, so it scales with the scene.

captionColor

Color

#ffffff

—

Text colour.

captionScrim

Number

0.55

0–1

Dark fade behind the text for legibility over busy artwork. 0 for none.

Links

Property

Type

Default

Description

linkTarget

Enum

same

Where a card's Link opens — Same tab or New tab. Set each destination in the Images list.

Background and fog

Property

Type

Default

Range

Description

bgStyle

Enum

solid

—

Solid or Gradient.

background

Color

#0e0e0e

—

Background colour, or the gradient's start.

backgroundEnd

Color

#1c2733

—

Gradient end. Gradient only.

bgAngle

Number

180

0–360

Gradient angle, in degrees. Gradient only.

fogEnabled

Boolean

true

—

Fades distant cards into the fog colour.

fogDensity

Number

0.035

0–0.3

How quickly distance fades a card out.

fogColor

Color

#0e0e0e

—

The colour distant cards fade into. Match it to whatever sits behind the coil, or the far end fades to the wrong shade.

Scroll

Property

Type

Default

Range

Description

smoothing

Number

0.3

0–2

Scroll lag. 0 locks the ribbon 1:1 to the scrollbar.

canvasProgress

Number

0.35

0–1

Which moment of the scroll to freeze on the Framer canvas. Has no effect on the published site.

Performance — the biggest cost is curveSegments. Flat cards run at full
frame rate; 8 slices with readable back faces is roughly three times the work.
If it feels heavy, lower Curve first, then set Back face to Hidden.

  • Sizing the ribbon — the strip must span Travel plus the couple of turns
    on screen, or it runs out before the scroll ends. Leave Entry/exit on Auto
    and it is handled for you; raise Repeat if a short image list feels sparse.

  • Accessibility — one link per card, not per slice, and
    prefers-reduced-motion falls back to a plain grid.

Details

Category

Gallery

Media

Image

Views

1.2k

Copies

Paste directly onto your Framer canvas.

Need a custom version?

We adapt components to your brand, motion and CMS setup.