A trail of blobs that melt into each other using nothing but blur and contrast.
The "gooey" effect is usually an SVG filter with feGaussianBlur and feColorMatrix. You can get the same result with two CSS filter functions, no SVG, no canvas, no JavaScript math.
Two CSS properties do all the work. blur() softens each blob's edge, and extreme contrast snaps every soft pixel back to fully solid or fully transparent. When two blobs overlap, their blurred edges combine, and the contrast threshold fuses them.
Two blobs merging via blur + contrast
Loading...
Each blob tracks the cursor with useSpring at a different stiffness. The first blob is snappy (stiffness 300), the second is laggy (stiffness 225). The difference creates a trailing effect without separate animation logic for each blob.
Two blobs tracking the cursor with different spring stiffness
Move your cursor
Loading...
Style the blobs as claret circles with bg-primary. The contrast filter on the parent container merges overlapping blobs into one continuous membrane. The wrapper background must match or be transparent, otherwise the contrast will posterize it.
Claret blobs with gooey merge via contrast filter
Move your cursor
Loading...
Scale to 5 blobs with decreasing size (52px to 16px) and stiffness (300 to 160). The larger blobs lead and the smaller ones trail, creating an organic taper instead of a string of identical beads.
5 blobs with decreasing size and stiffness
Move your cursor
Loading...
Adjust blob count, base stiffness, blur radius, and blob size. Lower blur values create less gooey stretch. Higher stiffness makes the trail shorter and more responsive.
Adjustable blob count, stiffness, and blur
Move your cursor
Loading...
Tune everything: number of blobs, spring stiffness, blur amount, and blob size. The code updates in real-time.
Move your cursor
Loading...