Progressive blur
CSS-driven backdrop blur that grows toward an edge, with masked layers and interruptible staggered transitions.
Examples
Scroll edges
ScrollArea owns overflow and positions the overlays. The viewport fades before sibling blur layers sample the visible surface, keeping text weight stable and scrollbars sharp. Toggle either effect without resetting the scroll position. Reduced motion removes transitions; reduced transparency and forced colors remove both effects.
Right-to-left scrolling
Inline edges follow the scroll direction. Keyboard focus clears the effects so controls stay readable. Pointer input passes through the decorative layers. With Next.js/Turbopack, set experimental.lightningCssFeatures.exclude to ["dir-selector"] to preserve native :dir() matching instead of approximating direction from language.
Composition
Decorative edge overlay
Position the container relatively and place the blur over its content.
- <div>
- background content
- <ProgressiveBlur />
Installation
The Control UI source installs this primitive from src/registry/sources/control-ui/ui/progressive-blur.tsx.
Raw code
Primary installed source
Knobs
Typed custom properties the recipe paints with. Set one on the root — style, a utility class, or a skin — and every slot inherits it.
--cui-progressive-blur-* · 5 knobsHow the cascade resolves--cui-progressive-blur-size<length-percentage>3rem--cui-progressive-blur-backdrop-blur<length>16px--cui-progressive-blur-fade-size<length-percentage>0.5rem--cui-progressive-blur-transition-duration<time>var(--duration-base)--cui-progressive-blur-transition-delay<time>calc(var(--cui-progressive-blur-transition-duration) * 0.06)