
Words that melt into each other
Text, Scroll, SVG
NewFree
Three full-height columns, each the colour of a herb, with a brush mark that draws itself. Passing over one, the column widens and its drawn plant rises out of the colour.
A folder that runs on its own: index.html, style.css, script.js and the libraries from a CDN.
The code for this animation is part of lifetime access.
The preview stays open: watch it, slow it down, try it on your phone.
Lifetime accessEach mark is a single SVG line. The script measures it with getPointAtLength at 120 points and, for each, moves one point left and one right along the normal: the thickness is width × (0.12 + 0.88 × sin(πt)^0.55) × (0.42 + 0.58 × |dy|), that is thin at the tips and full where the stroke goes down, like a nib held at an angle. The left points and the right ones, reversed, close the outline.
A filled outline cannot be drawn with stroke-dashoffset. The trick is a mask: the same centre line, 1.8 times as wide as the brush, with pathLength 1 and a dashoffset going from 1.02 to 0 in 1.3 seconds with power2.inOut. It uncovers the filled mark as it runs, and the leading edge is a clean cut, like the brush coming down.
The columns are flex: 1 1 0, and the active one goes to flex-grow 1.5 with a 0.7-second CSS transition. The others get filter: saturate(0.72) brightness(0.95). The plant, under the text, starts at opacity 0, 5% lower and scale 1.06, and settles in 1.1 seconds: it seems to rise out of the colour and come to rest.
Instead of pointerenter on each column, a single pointermove listener on the window asks which column is under the pointer and lights only that one. With the keyboard, the column of the focused button lights up; on phones the columns stack, the plants stay visible and the marks draw themselves when each column reaches the screen.
| Name | File | Default | What it changes |
|---|---|---|---|
SEGNI | script.js | 3 segni | The line of each mark, in 120 × 300, and the brush width: any line becomes a calligraphic stroke. |
DISEGNA | script.js | 1.3 | The seconds to draw a mark. |
--c | style.css | #A3B596, #A99BD1, #E6A23C | The colour of each column. |
flex-grow | style.css | 1.5 | How much the active column widens. |
To present three lines, three seasons, three services or three characters of a product, when each has its own colour and one gesture is enough to meet them.
The columns stack, each almost a screen tall; the plants are always visible and each mark draws itself when its column enters the screen.
The marks are already drawn, the columns keep their width and the plant appears in place with a 150-millisecond fade.
GSAP 3.15.0, Mona Sans (font variabile) 5.3.0.
Weight: 15 KB of our own files.
Tested on 27 September 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.
You’re signed in as .
Your plan is free. When lifetime access arrives, it will switch on for this same account.