A viewBox for Paint API Worklets
Paint API worklets are an excellent platform for creative expression on the web. They are fast, portable, and responsive, but they can also be fiddly — especially when working with generative designs.
Why? Their inherent responsiveness can be more of a curse than a blessing! Paint API worklets re-render every time their “target” element changes size, resulting in an ever-changing drawing space. Often, this is wonderful. But, it can introduce significant complexity when working both with and without randomness.
This got me thinking — wouldn’t it be rad if we could define a viewBox
attribute for our Paint API worklets, just like an SVG? We could define a fixed drawing space, say 1024x1024
units, and have it automatically scale to either cover or fit within its target element.
Something like this:
.worklet-target {
--viewbox-width: 1024;
--viewbox-height: 1024;
--scale-mode: cover;
}
It turns out this is possible, requires only a few lines of code, and is a rather handy option to have when developing all kinds of worklets. I won’t dive into too much technical detail here, but here’s a CodePen demonstrating the idea:
Gradients courtesy of Open Props.
You can find the worklet code in the JS tab and the CSS implementation in the CSS tab. Try toggling the --scale-mode
custom property between contain
and cover
and see how the pattern reacts.