The PaintWorkletGlobalScope
interface of the CSS Painting API represents the global object available inside a paint Worklet
.
Privacy concerns
To avoid leaking visited links, this feature is currently disabled in Chrome-based browsers for <a>
elements with an href
attribute, and for children of such elements. For details, see the following:
Instance properties
This interface inherits methods from WorkletGlobalScope
.
-
PaintWorkletGlobalScope.devicePixelRatio
Experimental
-
Returns the current device's ratio of physical pixels to logical pixels.
Instance methods
This interface inherits methods from WorkletGlobalScope
.
-
PaintWorkletGlobalScope.registerPaint()
Experimental
-
Registers a class to programmatically generate an image where a CSS property expects a file.
Event
Examples
The following three examples go together to show creating, loading, and using a paint Worklet
.
Create a paint worklet
The following shows an example worklet module. This should be in a separate js file. Note that registerPaint()
is called without a reference to a paint Worklet
.
class CheckerboardPainter {
paint(ctx, geom, properties) {
const dpr = self.devicePixelRatio;
const colors = ["red", "green", "blue"];
const size = 32;
for (let y = 0; y < geom.height / size; y++) {
for (let x = 0; x < geom.width / size; x++) {
const color = colors[(x + y) % colors.length];
ctx.beginPath();
ctx.fillStyle = color;
ctx.rect(x * size, y * size, size, size);
ctx.fill();
}
}
}
}
registerPaint("checkerboard", CheckerboardPainter);
Load a paint worklet
The following example demonstrates loading the above worklet from its js file and does so by feature detection.
if ("paintWorklet" in CSS) {
CSS.paintWorklet.addModule("checkerboard.js");
}
Use a paint worklet
This example shows how to use a paint Worklet
in a stylesheet, including the simplest way to provide a fallback if CSS.paintWorklet
isn't supported.
<style>
textarea {
background-image: url(checkerboard);
background-image: paint(checkerboard);
}
</style>
<textarea></textarea>
You can also use the @supports
at-rule.
@supports (background: paint(id)) {
background-image: paint(checkerboard);
}
Specifications
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
PaintWorkletGlobalScope |
65 |
79 |
No |
No |
52 |
No |
65 |
65 |
No |
47 |
No |
9.0 |
devicePixelRatio |
65 |
79 |
No |
No |
52 |
No |
65 |
65 |
No |
47 |
No |
9.0 |
registerPaint |
65 |
79 |
No |
No |
52 |
No |
65 |
65 |
No |
47 |
No |
9.0 |
See also