Overview
Typed halftone drift turns a procedural dot field into an animatable surface. The key is that the dots are not a bitmap and the animation is not swapping entire gradient declarations. radial-gradient() layers define the halftone, while @property exposes numeric controls for offset, radius, density, or angle.
When to use it
Use it for editorial headers, poster-like cards, small branded backgrounds, and data-adjacent surfaces where the dot structure is part of the visual language. It is strongest when the viewer should notice the printing or screen pattern itself. Avoid it behind long text, dense controls, or small numeric labels unless a stable overlay preserves contrast.
How it works
The background is made from repeated radial gradients whose positions and sizes are driven by custom properties. @property registers values with syntax such as <length>, <percentage>, or <angle>, allowing keyframes to move numeric controls instead of a whole gradient string.
Production gotchas
A new showcase example should change the expression method: offset drift, density shimmer, scale pulse, and duotone phase are distinct. Merely recoloring the same dot drift for another domain is not enough. Also watch paint cost at large sizes; procedural backgrounds can still repaint if the animated properties affect the gradient surface every frame.
Accessibility
The halftone is decorative. Keep text outside the moving dot contrast or behind a stable surface, and test the highest-density frame as well as the rest frame. Reduced motion should stop both dot drift and density shimmer while leaving a static halftone that still fits the design.
References
Implementation depth
Typed halftone drift treats dot spacing and offsets as animatable numeric values. Registering custom properties lets the browser interpolate the procedural background controls instead of swapping a whole radial-gradient string at keyframe boundaries.
The important design rule is expression method first. Dot scale, offset drift, and density shimmer are different halftone behaviors; changing only the color or domain label is not a new pattern. Keep text over the dots inside a contrast-tested surface.
Typed variables also make inspector controls honest. If a slider claims to control phase, radius, or density, it should update a registered value that visibly interpolates, not toggle a class that jumps between two hardcoded backgrounds.
Large halftone fields can still repaint, so keep them scoped. Use the effect for compact surfaces, cap density at small sizes, and verify that the reduced-motion frame does not create a noisy optical texture behind content.