
Words that melt into each other
Text, Scroll, SVG
NewFree
In the minimal style: a thin line rolled up tight in a spiral unrolls along the page like a tailor's tape, rolling and shrinking as it goes; behind it the ticks of the measure drop and the name of a made-to-measure shirt maker stands up out of the line letter by letter. Then it rolls back up from the end.
A folder that runs on its own: index.html, style.css, script.js and the libraries from a CDN. The React and Vue tabs hold the same demo as a ready component, which switches its animations off when it leaves the page.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The line that unrolls</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/full.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage" data-stage aria-label="Lisle, made to measure. Click to roll it up and out again.">
<!-- one thin line, rolled up tight: it unrolls along the page like a tape, the ticks of a measure and the name
standing up behind it -->
<svg class="scene" data-scene aria-hidden="true">
<g class="ticks" data-ticks></g>
<path class="tape" data-tape d="" />
<line class="end" data-end />
</svg>
<h1 class="word" data-word>Lisle</h1>
<p class="note" data-note>Shirts made to measure</p>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="script.js"></script>
</body>
</html>Change values, colours and text with the controls and watch the animation respond live. Or write in the code yourself. Then download the folder with your changes.
13 values to change
With the Animorio connector, Claude Code takes it from here, guide included, and fits it into your project. Paste this request:
Take “The line that unrolls” from Animorio and fit it into my siteThe spiral is Archimedean, r(φ) = r₀ + p·φ/2π, and its length up to the angle φ is about r₀φ + pφ²/4π. The total angle is chosen so the roll holds exactly the length of the finished line, solving the quadratic. So the line never changes length: what lies flat plus what is still rolled up is always the same.
GSAP tweens a single number, the part laid flat (0 to 1). From it: the contact point is the start plus the length laid, the angle left in the roll comes from the inverse formula, the centre is one radius above the contact. Every point of the spiral is drawn at the angle 90° − (Φ − φ), so as Φ shrinks the roll turns clockwise just like a wheel going right.
Ticks and letters have no tween of their own: how far they have grown is a function of how far the roll has gone past them (in pixels), passed through a damped spring written by hand, 1 − e^(−kq)·cos(8q), with k worked out so it overshoots by SPRING just once. The name sits in a box with overflow hidden that ends right on the line, so the letters come out of the line; the weight goes from 200 to 600 with the same q. Rolling back, the same functions pull them in on their own.
When the last curl flattens, the straight part is drawn as a polyline bent into half a wave with amplitude QUIVER·e^(−5t)·sin(34t): a single arc dying away in a second, like a taut thread just laid down.
One paused timeline: the spiral winds in (drawn from its outer end), unrolls, quivers, the orange tick arrives, a pause, it rolls back up and the spiral comes undone; on onComplete it starts from zero. With reduced motion the laid-out measure, with the name and the tick, fades in and stays.
| Name | File | Default | What it changes |
|---|---|---|---|
WORD | script.js | 'Lisle' | The name that stands up out of the line. |
ROLL | script.js | 3.2 | The seconds the line takes to unroll across the page. |
BACK | script.js | 2.1 | The seconds it takes to roll back up. |
PITCH | script.js | 1 | How loose the roll is: 0.6 tight, 1.6 with the turns further apart. |
SPRING | script.js | 0.04 | How far the letters and ticks go past their height as they stand up: 0 = not at all, 0.1 = a tenth. |
QUIVER | script.js | 3 | How many pixels the whole line quivers when it lands flat: 0 = it just stops. |
HOLD | script.js | 2.2 | The seconds the measure stays laid out. |
As the opening of a tailor's, a made-to-measure shirt maker, a fabric, rug or runner shop; as the title of a «measurements» page or a size guide; anywhere a thin line can carry the name.
The same animation with the sizes adapted: the line is nearly as long as the screen, the roll has fewer turns and the name gets smaller to fit above it.
Nothing rolls: the laid-out line with its ticks, the name, the orange tick and the line under it fade in and stay.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0.
Compressed with gzip, the three demo files weigh 5.3 KB; the libraries: GSAP 28 KB.
Tested on 19 October 2026
Use it in your own projects and in your clients’ projects. Do not resell it or redistribute it as is. GSAP stays under its own Standard license. Full license.
With your account’s email and password.
or with your email
You’re signed in as .
With your account, you can download the zip of every animation and every pack, for free.