Text printed on satin ribbons that twist and wave through 3D space
| Name | Type | Default | Description |
|---|---|---|---|
text | string | "MAKE SPACE FOR IDEAS" | The words printed along the ribbon. They repeat for its whole length. |
separator | string | " · " | Text placed between repeats. |
colors | [string, string] | ["#5227FF", "#FFFFFF"] | Ribbon colour and text colour. Every second ribbon swaps them. Accepts any CSS colour, including currentColor. |
band | boolean | true | Print the text on a solid satin band. Turn it off for floating type that twists on an invisible ribbon. |
path | "wave" | "loop" | "helix" | "wave" | The shape the ribbon follows: a wave across the view, a ring in perspective, or a spiral around a horizontal axis. |
ribbons | number | 1 | Number of ribbons, from 1 to 3. They interweave and alternate colours. |
gap | number | 120 | Vertical distance between ribbons in pixels. |
ribbonWidth | number | 76 | Width of the ribbon in pixels. |
textScale | number | 0.5 | Text height relative to the ribbon width. |
fontFamily | string | "inherit" | Font of the text. inherit uses the font of the surrounding page. |
fontWeight | number | 700 | Weight of the text. |
letterSpacing | number | 0.06 | Space between letters in em. |
amplitude | number | 70 | Height of the wave in pixels, or the radius of the helix. |
frequency | number | 1.1 | Waves or helix turns across the width of the component. |
depth | number | 120 | How far the ribbon swings toward and away from you, in pixels. |
twist | number | 0.12 | How far the ribbon rocks around its own length, in turns. Above 0.25 it shows its back. |
twistSpeed | number | 0.12 | How fast the rocking travels along the ribbon. |
speed | number | 90 | Speed of the text along the ribbon in pixels per second. |
direction | "left" | "right" | "left" | Direction the text travels. Every second ribbon runs the other way. |
flow | number | 0.35 | How fast the ribbon's shape undulates. |
tilt | number | -6 | Tilt of the whole ribbon toward or away from you, in degrees. |
perspective | number | 32 | Camera field of view in degrees. Higher values exaggerate depth. |
shading | number | 0.6 | How strongly the satin is lit and shaded as it turns, from 0 (flat) to 1. |
sheen | number | 0.4 | Satin highlight and rim light, from 0 to 1. |
hoverSpeed | number | 0.3 | Speed multiplier while the pointer rests over the ribbon, so it can be read. |
draggable | boolean | true | Drag sideways to scrub the text. A flick carries on with momentum. |
clickTwist | boolean | true | Click or tap to send a full twist rolling along the ribbon from that point. |
autoTwist | number | 0 | Seconds between automatic twists. 0 turns them off. |
intro | boolean | true | Fade in with a twist rolling along the ribbon when it mounts. |
paused | boolean | false | Freeze the motion. |
quality | number | 1 | Render scale and mesh detail, from 0.5 to 1. |
ref | { twist, replay } | — | twist(position?) rolls a twist from a point along the first ribbon (0 to 1). replay() plays the intro again. |
children | ReactNode | — | Content layered over the ribbon. |
className | string | — | Classes for the root element. It fills its parent and is at least 240px tall. |
style | CSSProperties | — | Inline styles for the root element. |
textstringThe words printed along the ribbon. They repeat for its whole length.
"MAKE SPACE FOR IDEAS"separatorstringText placed between repeats.
" · "colors[string, string]Ribbon colour and text colour. Every second ribbon swaps them. Accepts any CSS colour, including currentColor.
["#5227FF", "#FFFFFF"]bandbooleanPrint the text on a solid satin band. Turn it off for floating type that twists on an invisible ribbon.
truepath"wave" | "loop" | "helix"The shape the ribbon follows: a wave across the view, a ring in perspective, or a spiral around a horizontal axis.
"wave"ribbonsnumberNumber of ribbons, from 1 to 3. They interweave and alternate colours.
1gapnumberVertical distance between ribbons in pixels.
120ribbonWidthnumberWidth of the ribbon in pixels.
76textScalenumberText height relative to the ribbon width.
0.5fontFamilystringFont of the text. inherit uses the font of the surrounding page.
"inherit"fontWeightnumberWeight of the text.
700letterSpacingnumberSpace between letters in em.
0.06amplitudenumberHeight of the wave in pixels, or the radius of the helix.
70frequencynumberWaves or helix turns across the width of the component.
1.1depthnumberHow far the ribbon swings toward and away from you, in pixels.
120twistnumberHow far the ribbon rocks around its own length, in turns. Above 0.25 it shows its back.
0.12twistSpeednumberHow fast the rocking travels along the ribbon.
0.12speednumberSpeed of the text along the ribbon in pixels per second.
90direction"left" | "right"Direction the text travels. Every second ribbon runs the other way.
"left"flownumberHow fast the ribbon's shape undulates.
0.35tiltnumberTilt of the whole ribbon toward or away from you, in degrees.
-6perspectivenumberCamera field of view in degrees. Higher values exaggerate depth.
32shadingnumberHow strongly the satin is lit and shaded as it turns, from 0 (flat) to 1.
0.6sheennumberSatin highlight and rim light, from 0 to 1.
0.4hoverSpeednumberSpeed multiplier while the pointer rests over the ribbon, so it can be read.
0.3draggablebooleanDrag sideways to scrub the text. A flick carries on with momentum.
trueclickTwistbooleanClick or tap to send a full twist rolling along the ribbon from that point.
trueautoTwistnumberSeconds between automatic twists. 0 turns them off.
0introbooleanFade in with a twist rolling along the ribbon when it mounts.
truepausedbooleanFreeze the motion.
falsequalitynumberRender scale and mesh detail, from 0.5 to 1.
1ref{ twist, replay }twist(position?) rolls a twist from a point along the first ribbon (0 to 1). replay() plays the intro again.
—childrenReactNodeContent layered over the ribbon.
—classNamestringClasses for the root element. It fills its parent and is at least 240px tall.
—styleCSSPropertiesInline styles for the root element.
—