Dither Badge
buttonNewProA pill badge with a label and an icon, printed as Bayer-dithered pixel art in three inks on a gradient. The dots shimmer and the icon sways. It works as a static badge, a button or a link.
Introductory price until 31 December 2026. €79 after that.
Preview
Live demo. The theme switches the demo itself.
Code
The code is locked
Dither Badge is part of Manniche UI Pro. A key unlocks the source of all 66 effects.
Buy · €49€49 · Introductory price until 31 December 2026. €79 after that.
- One-off payment
- One developer
- Sign in and create your key straight away
- No VAT (§ 19 UStG)
Have a key? Get the code with the CLI or MCP.
The key lives in MANNICHE_PRO_KEY, never in your code or a URL. How to set it up
npx shadcn@latest add @manniche-pro/dither-badgeclaude mcp add --transport http manniche-ui https://mikkelmanniche.dk/api/mcp --header "Authorization: Bearer $MANNICHE_PRO_KEY"Props
DitherBadgeProps
| Prop | Type | Default | What it does |
|---|---|---|---|
children | ReactNode | – | The label. It is real text, drawn crisp over the dither. |
icon | ReactNode | – | A line icon (an SVG element, e.g. from lucide-react). It is printed in dots and sways a little. |
as | 'span' | 'button' | 'a' | 'span' | span for a static badge, button for an action, a for a link (pass href). |
href | string | – | Link target when as="a". |
type | 'button' | 'submit' | 'reset' | 'button' | Button type when as="button". |
disabled | boolean | – | Disables the button (only with as="button"). |
tone | DitherBadgeTone | 'bubblegum' | A ready-made pair of pill and icon inks. |
inks | DitherBadgeInks | – | Your own pill inks, shadow to highlight. |
iconInks | DitherBadgeInks | – | Your own icon inks, shadow to highlight. |
labelColor | string | – | Colour of the label. |
size | DitherBadgeSize | 'md' | Height step: 32, 44 or 56 pixels. |
iconSide | 'start' | 'end' | 'end' | Side the icon sits on. |
dot | number | 2 | Size of one printed dot in CSS pixels. |
shimmer | boolean | true | Let the dots shimmer and a gloss band pass over the pill now and then. |
sway | boolean | true | Let the icon sway. |
iconFill | boolean | false | Fill the icon's shapes as well as its lines. Suits solid icons; line icons usually look best unfilled. |
className | string | – | Classes for the pill. |
style | CSSProperties | – | Inline style for the pill. |
Also takes every prop from Omit<HTMLAttributes<HTMLElement>, 'children'>.
A11y
Keyboard
With as="button" or as="a" it is a native button or link with a visible focus ring. Hover and focus speed up the sway. Space applies only to as="button".
Screen reader
The label is real text. The dithered canvases and the source icon are aria-hidden. If the label alone is not clear, for example a bare count, pass aria-label, as the demo’s like button does.
Reduced motion
Under reduced motion the dither and the icon stand still. The shimmer runs at about 15 fps and stops off screen.
Other
Label colour is set per tone for contrast. If you change inks, set labelColor to match.