SolutionsCase StudiesAI ToolsResourcesAboutContact
Get Your Free AI Automation Audit Book a Free 30-Minute Strategy Call
Playground~/frontend Open editor

~/css/brutalism

7 CSS Brutalism

6 Pure CSS1 with JSPublished 2026-10-05Free · no sign-up

Seven neo-brutalist components: a button with a hard offset shadow, a heavily framed product card, a loud sign-up form, navigation made of touching boxes, an oversized headline, a warning with a hazard stripe and a grid layout with its lines on show.

01. Brutalist Button

BrutalismButton

Thick black border, a flat saturated fill, uppercase type and a hard offset shadow that the button drops into when pressed. Brutalism is loud on purpose, but the contrast it brings is also why it is one of the most readable styles.

View code
<button class="br1">BUY TICKETS</button>
.br1 { padding: 14px 24px; border: 3px solid #000; background: #facc15; color: #000; font: 900 16px Inter, system-ui, sans-serif; letter-spacing: .04em; box-shadow: 6px 6px 0 #000; cursor: pointer; transition: transform .1s, box-shadow .1s; }
.br1:hover { background: #fde047; }
.br1:active { transform: translate(6px, 6px); box-shadow: 0 0 0 #000; }
.br1:focus-visible { outline: 3px solid #2563eb; outline-offset: 6px; }
@media (prefers-reduced-motion: reduce) { .br1 { transition: none; } }

02. Brutalist Product Card

BrutalismCard

A product card with a heavy frame, a tag rotated across the corner, monospace price and no rounded corners anywhere. Every element is separated by black rules, so the structure is visible rather than implied.

View code
<article class="br2"><span class="tag">NEW</span><div class="im" aria-hidden="true"></div><h3>Canvas tote</h3><p class="pr">$32.00</p><button>Add to bag</button></article>
.br2 { position: relative; width: 220px; max-width: calc(100% - 10px); box-sizing: border-box; border: 3px solid #000; background: #fff; font: 14px Inter, system-ui, sans-serif; box-shadow: 8px 8px 0 #000; }
.br2 .tag { position: absolute; top: 12px; right: -6px; padding: 3px 10px; border: 2px solid #000; background: #f472b6; color: #000; font-weight: 900; transform: rotate(8deg); }
.br2 .im { height: 120px; border-bottom: 3px solid #000; background: repeating-linear-gradient(45deg, #a5f3fc 0 12px, #67e8f9 12px 24px); }
.br2 h3 { margin: 0; padding: 10px 12px 0; color: #000; font-size: 18px; font-weight: 900; text-transform: uppercase; }
.br2 .pr { margin: 0; padding: 2px 12px 10px; font: 700 15px "JetBrains Mono", ui-monospace, monospace; }
.br2 button { width: 100%; padding: 12px; border: 0; border-top: 3px solid #000; background: #000; color: #fff; font: 900 14px Inter, system-ui, sans-serif; text-transform: uppercase; cursor: pointer; }
.br2 button:hover { background: #4ade80; color: #000; }
.br2 button:focus-visible { outline: 3px solid #2563eb; outline-offset: -6px; }

03. Brutalist Sign-up Form

BrutalismForm

Big black labels, thick bordered fields, a raw grid and a solid shadowed submit button. The focus state is a heavy coloured outline, in keeping with the style and very easy to see.

View code
<form class="br3"><h3>JOIN THE LIST</h3><label>NAME<input autocomplete="name"></label><label>EMAIL<input type="email" autocomplete="email"></label><button>SUBSCRIBE →</button></form>
.br3 { display: grid; gap: 12px; width: 280px; max-width: 100%; padding: 18px; box-sizing: border-box; border: 3px solid #000; background: #fef3c7; font: 14px Inter, system-ui, sans-serif; }
.br3 h3 { margin: 0; color: #000; font-size: 24px; font-weight: 900; }
.br3 label { display: grid; gap: 4px; color: #000; font-weight: 900; font-size: 12px; letter-spacing: .1em; }
.br3 input { min-width: 0; padding: 10px; border: 3px solid #000; border-radius: 0; background: #fff; font: 16px Inter, system-ui, sans-serif; }
.br3 input:focus { outline: 4px solid #2563eb; outline-offset: 0; }
.br3 button { padding: 12px; border: 3px solid #000; background: #000; color: #fff; font: 900 15px Inter, system-ui, sans-serif; box-shadow: 4px 4px 0 #2563eb; cursor: pointer; }
.br3 button:focus-visible { outline: 4px solid #2563eb; outline-offset: 4px; }

04. Brutalist Navigation

BrutalismNavigation

A navigation bar as a row of bordered boxes that touch, with the current page filled solid and hover inverting colours. No spacing tricks or icons, just boxes and words.

View code
<nav class="br4" aria-label="Main"><a href="#index">INDEX</a><a href="#work" aria-current="page">WORK</a><a href="#about">ABOUT</a><a href="#shop">SHOP</a></nav>
.br4 { display: flex; flex-wrap: wrap; width: 340px; max-width: 100%; padding: 0 3px 3px 0; box-sizing: border-box; font: 900 14px Inter, system-ui, sans-serif; }
.br4 a { flex: 1 1 70px; padding: 12px 8px; margin: 0 -3px -3px 0; border: 3px solid #000; background: #fff; color: #000; text-align: center; text-decoration: none; }
.br4 a:hover { background: #000; color: #fff; }
.br4 a[aria-current] { background: #ef4444; color: #000; }
.br4 a:focus-visible { position: relative; z-index: 1; outline: 4px solid #2563eb; outline-offset: 0; }

05. Brutalist Headline Block

BrutalismTypography

An oversized, tightly set headline with a highlighted word and a monospace footnote, the typographic heart of brutalist pages. The highlight is a mark element, so the emphasis has meaning as well as colour.

View code
<section class="br5"><h3>WE MAKE <mark>LOUD</mark> WEBSITES.</h3><p>// EST. 2019 — BERLIN</p></section>
.br5 { width: 320px; max-width: 100%; padding: 16px; box-sizing: border-box; border: 3px solid #000; background: #fff; }
.br5 h3 { margin: 0; color: #000; font: 900 40px/0.95 Inter, system-ui, sans-serif; letter-spacing: -.03em; overflow-wrap: anywhere; }
.br5 mark { padding: 0 4px; background: #a3e635; color: #000; }
.br5 p { margin: 12px 0 0; color: #000; font: 600 12px "JetBrains Mono", ui-monospace, monospace; }

06. Brutalist Alert Box

BrutalismAlert

A warning box with a striped hazard edge, a bold label and a square close button. The stripes are a repeating linear gradient in a pseudo-element on the left, and the label WARNING carries the meaning in words.

View code
<div class="br6" role="alert"><div class="tx"><b>WARNING</b><p>Your cart expires in 10 minutes.</p></div><button aria-label="Dismiss warning">✕</button></div>
.br6 { display: flex; width: 320px; max-width: 100%; box-sizing: border-box; border: 3px solid #000; background: #fff; font: 14px Inter, system-ui, sans-serif; }
.br6::before { content: ""; flex: none; width: 18px; background: repeating-linear-gradient(-45deg, #000 0 8px, #facc15 8px 16px); border-right: 3px solid #000; }
.br6 .tx { flex: 1; padding: 10px 12px; } .br6 b { color: #000; font-weight: 900; } .br6 p { margin: 2px 0 0; color: #000; }
.br6 button { flex: none; width: 44px; border: 0; border-left: 3px solid #000; background: #fff; color: #000; font: 900 18px Inter, system-ui, sans-serif; cursor: pointer; }
.br6 button:hover { background: #000; color: #fff; }
.br6 button:focus-visible { outline: 4px solid #2563eb; outline-offset: -4px; }
var a = document.querySelector('.br6'); a.querySelector('button').onclick = function () { a.remove(); };

07. Raw Grid Layout

BrutalismLayout

A layout grid with its lines showing: cells separated by thick black lines, numbered labels and mismatched cell sizes. Exposed structure is a signature of brutalist web design, built here with grid and a 3px gap over a black background.

View code
<ul class="br7"><li class="a"><b>01</b>MANIFESTO</li><li><b>02</b>WORK</li><li><b>03</b>PRESS</li><li class="c"><b>04</b>CONTACT</li></ul>
.br7 { display: grid; grid-template-columns: 2fr 1fr; gap: 3px; width: 320px; max-width: 100%; margin: 0; padding: 3px; box-sizing: border-box; list-style: none; background: #000; font: 900 16px Inter, system-ui, sans-serif; }
.br7 li { display: grid; align-content: space-between; min-height: 80px; padding: 10px; background: #fff; color: #000; }
.br7 b { font: 600 11px "JetBrains Mono", ui-monospace, monospace; }
.br7 .a { grid-row: span 2; background: #c4b5fd; } .br7 .c { grid-column: span 2; background: #fca5a5; }

About these CSS Brutalism

Hard edges, hard shadows

Brutalism uses thick black borders, flat saturated fills and shadows with no blur, offset a few pixels. Pressing a button moves it into its shadow, which feels physical.

Structure on show

Instead of hiding layout, brutalist designs expose it: visible grid lines, numbered sections and boxes that touch. A grid with a black background and a small gap draws all the lines at once.

Loud, but readable

Black text on bright fills gives very high contrast, so the style is often more accessible than softer trends. Keep focus outlines just as bold as everything else.

Restraint in the details

Pick two or three fill colours and one typeface. Without a limit, brutalism turns into noise rather than attitude.

Frequently asked questions

Is brutalism good for business sites?

It suits creative studios, events and products that want to stand out; it is less suited to banks or healthcare.

Does it work on phones?

Yes. The boxes and borders scale well; reduce shadow offsets slightly on small screens.

Which fonts suit brutalism?

Heavy grotesques and monospace fonts for small labels.