Texture playground

Paper & grain · Noise

Vellum CSS texture

Vellum is a soft, low-frequency noise on a warm cream base: the turbulence is smoother than paper grain, so the surface mottles gently rather than speckling, the way parchment or a skin of translucent paper does. The warm base does half the work — the same noise on pure white reads as a dirty screen, and on cream it reads as a material.

It is a surface for invitations, certificates, menus, and any page that wants to feel printed rather than rendered. Dark text holds everywhere on it. It has no dark-mode equivalent — parchment is light — so give the dark theme a plain surface or Film grain, and let Vellum be a light-mode texture.

Swatch
Under text
Under a card

Recipe

Kind
Noise
Ink
theme foreground at 9%
Frequency
0.25
Octaves
2
Tile
200px
Base
#fdf6e3
Ink color
color-mix(in oklab, var(--foreground) 9%, transparent)

CSS

.vellum {
  position: relative;
  isolation: isolate;
  background-color: #fdf6e3;
}
.vellum::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  opacity: 0.09;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.25' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 200px 200px;
}

Tailwind

relative isolate bg-[#fdf6e3] before:absolute before:inset-0 before:-z-10 before:content-[''] before:opacity-[0.09] before:bg-[image:url("data:image/svg+xml,%3Csvg_xmlns='http://www.w3.org/2000/svg'_width='200'_height='200'%3E%3Cfilter_id='n'_x='0'_y='0'_width='100%25'_height='100%25'%3E%3CfeTurbulence_type='fractalNoise'_baseFrequency='0.25'_numOctaves='2'_stitchTiles='stitch'/%3E%3CfeColorMatrix_type='saturate'_values='0'/%3E%3C/filter%3E%3Crect_width='200'_height='200'_filter='url(%23n)'/%3E%3C/svg%3E")] before:bg-[size:200px_200px]

Token

--texture-vellum: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.25' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E");
--texture-vellum-size: 200px 200px;

Vellum, answered

How is the vellum texture made in CSS?
Vellum is an inline SVG turbulence tile, applied on a pseudo-element with an opacity — no image request, a seamless repeat, and crisp at every pixel density. Its ink is the theme's foreground color mixed to 9% with color-mix, so the same declaration re-tints itself when the theme switches between light and dark mode. The full declaration is url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.25' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E") — copy the CSS rule, the Tailwind classes or the custom property above, or open it in the playground to change the pitch, the ink or the alpha.
How do I use the vellum texture in Tailwind CSS?
Copy the Tailwind tab: noise needs a pseudo-element, so the output is a before: stack — relative and isolate on the element, then before:absolute, before:inset-0, before:-z-10, an opacity and the tile as before:bg-[image:…]. Tailwind v3 and v4 both accept the arbitrary values; for a value you reuse, register the Token tab's custom property instead.
How subtle should the vellum texture be?
Grain reads as paper fibre below about twelve percent and as dirt above it; this preset sits at 9%. Treat ten percent as the ceiling for any surface that carries body text, and lower it further behind small type.

More paper & grain textures

We'd like to use Google cookies to understand how Nodlume is used and to measure our advertising. Nothing loads until you choose, and declining does not affect anything in the app.