Neo-Brutalist Angular Halftone

Halftone

A decorative dot-grid component that anchors to card corners via absolute positioning or renders as a clean rectangular strip. The classic halftone pattern borrowed from print design adds depth and texture to brutalist cards without cluttering the layout.

CSSRectangle strip
Source ↗Open Docs

Preview

Card with halftone

Dot grid anchors to the bottom-right corner.

Usage

Place <div nbHalftone> inside a relative overflow-hidden container. Position it with Tailwind classes (absolute, top-*, right-*, etc). The component is decorative (aria-hidden="true").

Import
import { NbHalftone } from '@ng-brutalism/ui';
Template
<div
  class="relative overflow-hidden border-2 border-(--nb-border) bg-nb-paper p-8 shadow-[5px_5px_0_0_var(--nb-shadow)]"
  style="min-height: 140px;"
>
  <div nbHalftone class="absolute bottom-0 right-0"></div>
  <p class="font-bold text-lg">Card with halftone</p>
  <p class="font-medium text-sm mt-1">Dot grid anchors to the bottom-right corner.</p>
</div>

Custom Color & Positioning

Custom dot colors

Rectangle

Use rectangle halftone as a decorative strip behind headings, badges, image cards, recipe accents, and banner edges. Rows and columns give you a predictable dot count, while size and gap inputs tune the visual rhythm.

Graphic strip accent

A rectangular dot matrix with a predictable 3 by 13 count.

API

InputTypeDefaultDescription
shape'square' | 'circle' | 'rectangle''square'Visual shape. Rectangle renders a CSS background strip.
colorstringvar(--nb-border)Dot fill color (any CSS color value).
rowsnumber7 / 3 rectangleNumber of dot rows.
columnsnumber7 / 13 rectangleNumber of dot columns.
sizenumber6 / 8 rectangleDot diameter in px.
gapnumber5 / rectangle rhythmGap between dots in px. Rectangle strips use this as both axes unless gapX or gapY is set.
gapXnumber28 rectangleHorizontal rectangle dot rhythm in px.
gapYnumber27 rectangleVertical rectangle dot rhythm in px.