webdevpuneet.com

Neo-Brutalist Card — Free HTML CSS Hard Shadow Snippet

Neo-Brutalist Card · Cards · Plain HTML, CSS & JS · Live preview

CategoryCards

Copy & paste

Source Code

<div class="nb-stage">
  <article class="nb-card" tabindex="0">
    <div class="nb-tag">NEW</div>
    <div class="nb-thumb" aria-hidden="true">
      <svg viewBox="0 0 24 24" fill="none" stroke="#111" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="M13 2 3 14h7l-1 8 10-12h-7l1-8z"></path></svg>
    </div>
    <h3 class="nb-title">Ship faster</h3>
    <p class="nb-text">A bold, high-contrast card with a hard offset shadow that snaps on hover. Pure CSS, no blur.</p>
    <div class="nb-foot">
      <span class="nb-price">$0</span>
      <button type="button" class="nb-btn">Get it →</button>
    </div>
  </article>
</div>

Extend with AI

Take This Snippet Further With AI

The AI prompt for this one is for Patreon supporters ($3 a month, 7 days free), along with a site with no ads. Supporters enter the passcode once and it is remembered in this browser.

· Become a supporter

What's included

Features

Zero-blur hard shadow
box-shadow with 0 blur creates the crisp brutalist offset.
Lift on hover and focus
translate plus a larger shadow makes the card rise.
Physical press on active
It moves toward its shadow when clicked.
Flat saturated palette
Solid color blocks separated by 3px black borders.
Rotated accent tag
A tilted NEW sticker gives the handmade brutalist feel.
Keyboard operable
Enter and Space trigger the CTA via a keydown handler.
Tactile click feedback
The button confirms with an inverted Added state.
No images or blur
Pure HTML and CSS, trivially themeable.

About this UI Snippet

Neo-Brutalist Card — Hard Shadows, Thick Borders, Tactile Press

Screenshot of the Neo-Brutalist Card snippet rendered live

Neo-brutalism is the high-contrast design trend that strips away soft gradients and blurred shadows in favor of thick black outlines, flat saturated color blocks, and chunky offset shadows that look like the element was cut from paper and dropped on the page. This snippet builds a complete neo-brutalist product card in plain HTML, CSS, and a few lines of vanilla JavaScript — no framework, no images, no blur filters.

The defining hard shadow

The whole look hinges on one property: box-shadow: 8px 8px 0 #111. The zero blur radius is what makes it "brutalist" — instead of a soft drop shadow, you get a crisp solid duplicate offset down and to the right, as if a second black card sits directly behind it. Combined with a 3px solid #111 border on every element, the card reads as a bold sticker rather than a floating surface. The same recipe is applied to the thumbnail, the button, and the rotated "NEW" tag so the entire composition feels consistent.

A press that moves in space

On :hover and keyboard :focus-visible the card translates up-left with translate(-4px,-4px) while the shadow grows to 12px 12px — the card appears to lift off the page. On :active it does the opposite: it translates down-right and the shadow shrinks to 4px, so clicking physically pushes the card toward its shadow like a real button. Because the transform and box-shadow both transition over .12s, the motion is snappy rather than floaty, which is exactly the brutalist feel. The button repeats this lift-and-press at a smaller scale so nested controls behave the same way.

Color as structure

Brutalism leans on flat, unapologetic color. The page background is a saturated yellow, the card is pure white, the icon tile is hot pink, the CTA is lime, and the tag is cyan — each separated by the same black border so the palette never turns muddy. There are no opacity tricks or gradients; every surface is a solid fill. This makes the card trivially themeable: swap the five hex values and you have a new variant without touching layout.

The rotated accent tag

The "NEW" badge is absolutely positioned outside the card's top edge and rotated 4deg with transform: rotate(4deg). That tiny tilt is a brutalist signature — perfectly aligned elements feel corporate, while a single rotated sticker feels handmade and energetic. Because it is a normal positioned element, you can move it to any corner or change the angle freely.

What the JavaScript adds

The aesthetic is entirely CSS; JavaScript only provides tactile feedback. Clicking the button swaps its label to "Added ✓" and inverts its colors for 1.1 seconds before reverting, giving a satisfying confirmation without a state library. A keydown handler on the card maps Enter and Space to the button so the whole component is operable from the keyboard, and stopPropagation keeps the button click from bubbling to the card.

Customizing it

Resize the shadow offset to make the card feel heavier or lighter, change the border radius from the rounded 14px to 0 for a stricter brutalist look, or drop the card into a CSS grid to build a whole bento wall of them. Pair it with a pricing card grid or use the same shadow recipe on a shimmer button to keep a consistent design language across a landing page.

Step by step

How to Use

  1. 1
    Paste HTML, CSS, and JSA bold yellow stage renders a white card with a hard black offset shadow.
  2. 2
    Hover or tab to the cardIt lifts up-left and the solid shadow grows, with no blur.
  3. 3
    Press itThe card pushes down-right toward its shadow like a physical button.
  4. 4
    Click Get itThe lime CTA flips to a dark Added confirmation for a moment.
  5. 5
    Recolor the paletteSwap the five flat hex fills to create a new brutalist variant.
  6. 6
    Tile into a gridDrop multiple cards into a CSS grid for a bento-style wall.

Real-world uses

Common Use Cases

Bold landing pages
Headline a brutalist hero beside an animated gradient CTA, using thick black borders and flat saturated colour blocks.
Pricing grids
Restyle a wall of pricing card options in the brutalist style, with a zero-blur hard shadow giving a crisp offset.
Brutalist bento cells
Use as the cells of a bento grid layout, with cards lifting on hover and focus through translate plus a larger shadow.
E-commerce product cards
Give a product card a high-contrast treatment, so pressing it moves it toward its shadow like a physical button.
Design system demos
Contrast with a neon glow accent, and use as a reference for the hard-shadow brutalist look.

Got questions?

Frequently Asked Questions

The blur radius is zero: box-shadow: 8px 8px 0 #111 paints a solid offset copy of the element rather than a soft fade. Paired with a thick 3px solid black border, the card reads as a flat cut-out sticker instead of a floating material surface, which is the core of the neo-brutalist aesthetic.

On hover it translates up-left while the shadow grows, so it lifts off the page; on active it translates down-right and the shadow shrinks, so a click pushes it toward its shadow. Both the transform and box-shadow transition over 0.12s, giving a snappy mechanical press rather than a floaty animation.

Yes. Every surface is a flat solid fill — the yellow background, white card, pink icon tile, lime button, and cyan tag are independent hex values with no gradients or opacity. Swap any of the five colors to create a new variant without touching the layout or shadow rules.

The card has tabindex="0" and a focus-visible style identical to its hover state, so keyboard users see the same lift. A keydown handler maps Enter and Space to the CTA, and stopPropagation keeps the button from double-firing through the card. Replace the icon SVG with a real label if it conveys meaning.

The markup and CSS port directly — drop the JSX or template in and keep the class names. Move the button click and card keydown listeners into the framework: an onClick handler that toggles an added boolean in state (React), a @click and ref in Vue, or an (click)/(keydown) binding in Angular. In Tailwind, express the look with border-[3px] border-black shadow-[8px_8px_0_#111] and hover:-translate-x-1 hover:-translate-y-1.