Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Backgrounds

Pro

Blueprint Background for React

Drafting paper with a fine grid, where technical drawings draw themselves stroke by stroke around the edges, hold, and are erased. For React with Base UI, when a design, engineering or architecture page should look planned to the millimetre.

Framework

Drafting paper with a fine grid, where technical drawings (an isometric block, a floor plan, a roof truss, a steel section, a stair, a flange) draw themselves stroke by stroke around the edges, hold, and are erased in the order they were drawn, two or three on the paper at a time. Circles are swept round like a compass, and dimension and centre lines and labels follow each outline. It follows your theme: blue linework on a cool white sheet in light mode, pale blue on deep navy in dark. The grid is CSS gradients; each stroke is a thin line that grows from its start, each circle is revealed by a sweeping clip, and the labels fade in, all on keyframes the install adds to your stylesheet. Nothing runs in the browser, and the browser never restyles or repaints while the drawings come and go.

Use it behind design, engineering or architecture pages. For a plain grid without drawings, use Grid Pattern; for dotted paper, Dot Pattern; for contour lines that also draw themselves, Topography.

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Usage

import { Blueprint } from "@/components/ui/blueprint";

Blueprint is a container: give it a size and put your content inside. The paper is part of the look, so it paints its own sheet, light or dark with your theme; text in your foreground colour reads on both.

<Blueprint className="flex min-h-[420px] items-center justify-center">
  <h1 className="text-5xl font-semibold">Measure twice, ship once</h1>
</Blueprint>

For a backdrop behind the whole page, leave it empty and fix it under everything else:

<Blueprint className="fixed inset-0 -z-10" />

Demos

Drafting paper

Graphite on paper: surfaceColor="var(--background)", lineColor="var(--foreground)" and a softened foreground for inkColor put the grid and the drawings in your theme's colours, so it reads as pencil and follows light and dark.

Preview width

Classic blueprint, faster

The classic look: a royal-blue sheet (surfaceColor) with blue-white lines and ink, in a card. speed={1.5} brings the drawings in faster, and gridSpacing={16} tightens the grid.

Preview width

Accessibility

The paper is decorative: it's hidden from screen readers and lets every click through to your content. With reduced motion the drawings hold still where they are, a calm sheet with a drawing or two on it, and nothing moves. Nothing flashes: strokes grow over 0.6 seconds, and a drawing holds for several seconds before it's erased stroke by stroke. The drawings sit around the edges, the grid lines are faint (at most 16% of their colour), and the ink is a mid blue on the light sheet and a pale blue on the dark one, so text in your foreground colour keeps its contrast; on the classic blue sheet, use white text.

FAQ

Can I make it look like pencil on paper, or classic blueprint blue?

Yes: pass colours to surfaceColor, lineColor and inkColor, as in "Drafting paper" (theme colours) or "Classic blueprint" (royal blue). You can also set --blueprint-surface, --blueprint-line-color and --blueprint-ink-color from your own CSS.

How often does a drawing appear?

Three places around the edges each alternate two drawings on a 28-second loop, staggered, so a new drawing starts every 4.7 seconds and two or three are on the paper at once. speed={2} halves that.

Can I change the grid?

gridSpacing sets the minor step in pixels (24); every fifth line is a major line, drawn a little stronger.

Will the drawings cover my headline?

They sit around the edges, sized from the box (about half its shorter side), and run off the edge a little in wide or narrow boxes, so the middle stays clear for your content.

Is it smooth, and does it run any script?

No script runs: the grid is CSS gradients, and every stroke, circle and label moves with scale, opacity or clip-path alone, which the compositor animates without the main thread. So the browser doesn't restyle or repaint while the drawings come and go, and it renders on the server.

What happens with reduced motion?

Everything holds still where it is, so the sheet shows a drawing or two, fully or partly drawn, and nothing moves.

API Reference

Blueprint

<div> data-slot="blueprint"

PropType
gridSpacing?number

The minor grid step, in pixels; every fifth line is a major line. @default 24.

inkColor?string

The drawings' and labels' colour, any CSS colour.

Default
a drafting blue, lighter on a dark page
lineColor?string

The grid lines' colour, any CSS colour (minor lines show at 8% of it, major lines at 16%).

Default
a drafting blue, lighter on a dark page
speed?number

How fast the drawings come and go: 2 is twice as fast, 0.5 half as fast.

Default
1
surfaceColor?string

The paper's colour, any CSS colour.

Default
a cool white on a light page, deep navy on a dark one
render?ReactElement | ((props: object, state: object) => ReactElement)

Replace the host element or compose it with another component.

Type
ReactElement | ((props: object, state: object) => ReactElement)
className?string

Merged with the part's classes.

CSS variableType
--blueprint-ink-colorstring

The drawings' colour.

--blueprint-line-colorstring

The grid lines' colour.

--blueprint-speedstring

How fast the drawings come and go, a multiplier (1: a 28 s loop).

--blueprint-surfacestring

The paper's colour.

All 100 backgrounds