The other day – trying to empty my head and relax a bit – I stared at the colorful rug next to my chair:
And suddenly, instead of emptying my head, I started to wonder about how I could re-create this in svg — that is: repeating circles with random colors!
When working with random patterns, the first thing you need is a random function:
function R(max, min = 0) {
return Math.floor(Math.random() * (max - min) + min);
};
If you call it like R(360), it will return a random number between 0 and 360. If you add a second parameter, like R(360, 200), it will limit the random number to a number between 200 and 360.
The circles are created within a dual loop – one for the y-axis, and one for the x-axis (excerpt) :
<circle
cx="${cx}" cy="${cy}" r="${r}"
fill="hsl(${R(A.elements.he.valueAsNumber,
A.elements.hs.valueAsNumber)},
${R(A.elements.se.valueAsNumber,
A.elements.ss.valueAsNumber)}%,
${R(A.elements.le.valueAsNumber,
A.elements.ls.valueAsNumber)}%)"
/>
Most of the code deals with the random colors.
hsl() is perfect for this, since it's three ranges of numbers, that can be randomized:
- hue (0-360)
- saturation (0-100)
- lightness (0-100)
A is the main form for editing the variables:
– and as mentioned above, you can limit the randomness, in this case the hue (min and max):
If you set the radius to a larger value than the size, you end up with something similar to my rug:
Here's a Codepen with the final result. Open it in fullscreen, click on the rotating cog-wheel to open the editor, and have fun!
If you want, you can save the pattern you create as either png, jpg or webp — just select a type, and click on Save to Image.
Thanks for reading!




Top comments (0)