Skip to content
Neon UI
Esc
navigateopen⌘Jpreview
On this page

HalftoneBloom

Halftone ring field revealed by soft drifting color blooms behind a punched-metal screen.

HalftoneBloom is a punched-metal halftone screen lit from behind: every cell is a ring (a disc with a smaller hole punched off-center), and the only light in the scene is a configurable rig of blurred color lights drifting slowly behind it. Each ring samples the light field once at its cell center, so the gradient steps cell by cell like a print halftone. The canvas is transparent outside the lit rings, so it sits on dark and light surfaces alike. The heritage scene recreates the dark background reference; sunrise, meadow, and spring recreate the neon.com pattern strips with colors sampled from the source art:

dials
scene
surface

Install

npx shadcn@latest add https://ui.neon.com/r/halftone-bloom.json

Usage

import { HalftoneBloom } from "@/components/neon-ui/halftone-bloom";

<section className="relative isolate overflow-hidden bg-black">
  <HalftoneBloom className="absolute inset-0" />
  <div className="relative">{content}</div>
</section>;

// A custom rig: any set of up to six lights.
import { bloomScenes } from "@/components/neon-ui/fixtures";

<HalftoneBloom
  highlight={bloomScenes.sunrise.highlight}
  lights={bloomScenes.sunrise.lights}
/>;

Props

PropType
speed?number

Bloom drift speed multiplier; 0 freezes the field.

Typenumber
Default1
gap?number

Cell pitch in CSS pixels.

Typenumber
Default12
holeSize?number

0-1 punched-hole radius as a share of the cell.

Typenumber
Default0.22
intensity?number

Overall bloom brightness multiplier.

Typenumber
Default1
holeOffset?[number, number]

Hole offset from the cell center, in cell units.

Type[number, number]
Default[-0.09, -0.09]
drift?number

0-1 how far lights wander from their anchors.

Typenumber
Default1
highlight?string

The overexposed highlight color.

Typestring
Default"#ecdcae"
lights?BloomLight[]

The light rig, up to 6 lights: { color, x, y, radius?, intensity?, overexpose? }. x/y are 0-1 anchors; radius is a share of the width.

TypeBloomLight[]
Defaultheritage scene