16 / 31
All 31 in 31 Tailwind CSS Hero Sections
- 01Centered Hero Section in Tailwind CSS with Serif Headline & Dual CTA
- 02Tailwind CSS Split Hero Section with Dashboard Mockup
- 03Tailwind CSS Animated Gradient Mesh Hero Section
- 04Glassmorphism Hero Section in Tailwind CSS with Aurora Background
- 05Tailwind CSS Developer Hero Section with Terminal Window
- 06Tailwind Hero Section with Animated Geometric Shapes Background
- 07Tailwind CSS Hero Section with Star Rating & Logo Cloud
- 08Tailwind CSS Animated Headline Hero with Staggered Word Reveal
- 09Before and After Image Comparison Slider Hero in Tailwind CSS
- 10Full-Screen Tailwind Hero with Animated Scroll Down Indicator
- 11Magazine Cover Hero Section in Tailwind CSS
- 12Asymmetric Typography Hero Section in Tailwind CSS
- 13Tailwind CSS Hero Section with Oversized Background Number
- 14Infinite Scrolling Marquee Hero Section in Tailwind CSS
- 15Tailwind CSS Hero Section with Image & Overlay Card
- 16Brutalist Hero Section in Tailwind CSS
- 17Vertical Text Hero Section in Tailwind CSS (Japanese Writing Mode)
- 18Kinetic Typography Hero in Tailwind CSS with Animated Letters
- 19Bento Grid Hero Section in Tailwind CSS
- 20Animated Gradient Text Hero Section in Tailwind CSS
- 21Tailwind CSS Product Hero with Floating Feature Badges
- 22Tailwind CSS Hero Section with Pricing Card
- 23Mobile App Landing Page Hero in Tailwind CSS with App Store Buttons
- 24Neon Glow Hero Section in Tailwind CSS (Cyberpunk)
- 25Parallax Mountain Landscape Hero in Tailwind CSS
- 26Isometric Illustration Hero Section in Tailwind CSS
- 273D Card Stack Hero in Tailwind CSS with Hover Fan-Out
- 28Animated Starfield Background Hero in Tailwind CSS
- 29Glitch Text Effect Hero Section in Tailwind CSS
- 30Animated Conic Gradient Ring Hero in Tailwind CSS
- 31Mouse-Tracking Liquid Glass Lens Hero in Tailwind CSS
Brutalist Hero Section in Tailwind CSS
Raw Swiss-punk brutalism — pure black, traffic-cone orange highlight, acid-lime italic, hard 8px offset shadows that collapse on press, and a mono index line. No images, no gradients, no soft anything.
Complete Tailwind CSS landing page templates in HTML, React, Next.js and Vue · from $49
Cruip · Affiliate link
The code
<section class="ths-16 grid w-full min-h-svh place-items-center bg-ths16-bg px-5 py-16 font-ths16-sans text-white sm:px-14" aria-label="Brutalist hero">
<div class="w-full max-w-[52rem]">
<div class="flex flex-wrap items-center justify-between gap-3">
<span class="bg-ths16-orange px-2.5 py-1 font-ths16-mono text-xs font-bold tracking-[0.2em] text-ths16-bg">001 / 042</span>
<span class="font-ths16-mono text-xs tracking-[0.2em] text-ths16-mut">STUDIO — BERLIN / NYC</span>
</div>
<h1 class="mt-7 text-[clamp(44px,8vw,96px)] leading-[0.9] font-bold tracking-[-0.045em] uppercase">The web <em class="text-ths16-lime">was never</em> meant to <span class="mt-2 inline-block -rotate-1 bg-ths16-orange px-3 text-ths16-bg">look safe.</span></h1>
<div class="mt-8 grid gap-8 border-t-2 border-ths16-orange pt-6 md:grid-cols-[1fr_auto]">
<p class="max-w-md font-ths16-mono text-sm leading-relaxed text-ths16-mut">A design studio for brands that would rather be remembered than liked.</p>
<dl class="grid grid-cols-[auto_1fr] gap-x-6 gap-y-1 font-ths16-mono text-xs text-ths16-mut">
<dt>Founded</dt><dd class="text-white">2014</dd>
<dt>Shipped</dt><dd class="text-white">212 brands</dd>
<dt>Awards</dt><dd class="text-white">0 wanted</dd>
</dl>
</div>
<div class="mt-9 flex flex-wrap gap-5">
<a href="#work" class="inline-flex min-h-12 items-center border-2 border-ths16-orange bg-ths16-orange px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-ths16-bg shadow-[8px_8px_0_var(--color-ths16-lime)] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:shadow-[4px_4px_0_var(--color-ths16-lime)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-white motion-reduce:transition-none">[ SEE WORK ]</a>
<a href="#talk" class="inline-flex min-h-12 items-center border-2 border-white px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-white shadow-[8px_8px_0_white] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:bg-white hover:text-ths16-bg hover:shadow-[4px_4px_0_var(--color-ths16-orange)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-ths16-lime motion-reduce:transition-none">[ EMAIL ]</a>
</div>
</div>
</section><section class="ths-16 grid w-full min-h-svh place-items-center bg-ths16-bg px-5 py-16 font-ths16-sans text-white sm:px-14" aria-label="Brutalist hero">
<div class="w-full max-w-[52rem]">
<div class="flex flex-wrap items-center justify-between gap-3">
<span class="bg-ths16-orange px-2.5 py-1 font-ths16-mono text-xs font-bold tracking-[0.2em] text-ths16-bg">001 / 042</span>
<span class="font-ths16-mono text-xs tracking-[0.2em] text-ths16-mut">STUDIO — BERLIN / NYC</span>
</div>
<h1 class="mt-7 text-[clamp(44px,8vw,96px)] leading-[0.9] font-bold tracking-[-0.045em] uppercase">The web <em class="text-ths16-lime">was never</em> meant to <span class="mt-2 inline-block -rotate-1 bg-ths16-orange px-3 text-ths16-bg">look safe.</span></h1>
<div class="mt-8 grid gap-8 border-t-2 border-ths16-orange pt-6 md:grid-cols-[1fr_auto]">
<p class="max-w-md font-ths16-mono text-sm leading-relaxed text-ths16-mut">A design studio for brands that would rather be remembered than liked.</p>
<dl class="grid grid-cols-[auto_1fr] gap-x-6 gap-y-1 font-ths16-mono text-xs text-ths16-mut">
<dt>Founded</dt><dd class="text-white">2014</dd>
<dt>Shipped</dt><dd class="text-white">212 brands</dd>
<dt>Awards</dt><dd class="text-white">0 wanted</dd>
</dl>
</div>
<div class="mt-9 flex flex-wrap gap-5">
<a href="#work" class="inline-flex min-h-12 items-center border-2 border-ths16-orange bg-ths16-orange px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-ths16-bg shadow-[8px_8px_0_var(--color-ths16-lime)] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:shadow-[4px_4px_0_var(--color-ths16-lime)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-white motion-reduce:transition-none">[ SEE WORK ]</a>
<a href="#talk" class="inline-flex min-h-12 items-center border-2 border-white px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-white shadow-[8px_8px_0_white] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:bg-white hover:text-ths16-bg hover:shadow-[4px_4px_0_var(--color-ths16-orange)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-ths16-lime motion-reduce:transition-none">[ EMAIL ]</a>
</div>
</div>
</section>@import "tailwindcss";
@theme {
--color-ths16-bg: #0a0a0a;
--color-ths16-bg: oklch(0.145 0 0);
--color-ths16-mut: #b5b5b5;
--color-ths16-mut: oklch(0.773 0 0);
--color-ths16-orange: #ff5e1a;
--color-ths16-orange: oklch(0.687 0.208 39.4);
--color-ths16-lime: #c4f048;
--color-ths16-lime: oklch(0.894 0.194 123.2);
--font-ths16-sans: 'Space Grotesk', system-ui, sans-serif;
--font-ths16-mono: 'JetBrains Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.ths-16 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-ths16-bg: #0a0a0a;
--color-ths16-bg: oklch(0.145 0 0);
--color-ths16-mut: #b5b5b5;
--color-ths16-mut: oklch(0.773 0 0);
--color-ths16-orange: #ff5e1a;
--color-ths16-orange: oklch(0.687 0.208 39.4);
--color-ths16-lime: #c4f048;
--color-ths16-lime: oklch(0.894 0.194 123.2);
--font-ths16-sans: 'Space Grotesk', system-ui, sans-serif;
--font-ths16-mono: 'JetBrains Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.ths-16 {
width: 100%;
min-height: 100svh;
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-ths16-bg: #0a0a0a;
--color-ths16-bg: oklch(0.145 0 0);
--color-ths16-mut: #b5b5b5;
--color-ths16-mut: oklch(0.773 0 0);
--color-ths16-orange: #ff5e1a;
--color-ths16-orange: oklch(0.687 0.208 39.4);
--color-ths16-lime: #c4f048;
--color-ths16-lime: oklch(0.894 0.194 123.2);
--font-ths16-sans: 'Space Grotesk', system-ui, sans-serif;
--font-ths16-mono: 'JetBrains Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.ths-16 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-ths16-bg: #0a0a0a;
--color-ths16-bg: oklch(0.145 0 0);
--color-ths16-mut: #b5b5b5;
--color-ths16-mut: oklch(0.773 0 0);
--color-ths16-orange: #ff5e1a;
--color-ths16-orange: oklch(0.687 0.208 39.4);
--color-ths16-lime: #c4f048;
--color-ths16-lime: oklch(0.894 0.194 123.2);
--font-ths16-sans: 'Space Grotesk', system-ui, sans-serif;
--font-ths16-mono: 'JetBrains Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.ths-16 {
width: 100%;
min-height: 100svh;
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=JetBrains+Mono:wght@500;700&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@500;700&family=JetBrains+Mono:wght@500;700&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- The
.hs-16__cta-primodifier and its hover override became one class list per button — no specificity puzzle. - UI upgrade from the CSS original: the description promised hard 8px offset shadows that the CSS never drew; both CTAs now have them, plus a press-flat
active:state. - UI upgrade: a Swiss index rail (founded / shipped / awards) and a location line give the hero studio credibility; Space Grotesk adds the punk-grotesk edge.
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Brutalist Hero Section in Tailwind CSS
Source: https://codefronts.com/layouts/tailwind-css-hero-sections/tailwind-brutalist-hero-section/
Raw Swiss-punk brutalism — pure black, traffic-cone orange highlight, acid-lime italic, hard 8px offset shadows that collapse on press, and a mono index line. No images, no gradients, no soft anything.
## HTML
```html
<section class="ths-16 grid w-full min-h-svh place-items-center bg-ths16-bg px-5 py-16 font-ths16-sans text-white sm:px-14" aria-label="Brutalist hero">
<div class="w-full max-w-[52rem]">
<div class="flex flex-wrap items-center justify-between gap-3">
<span class="bg-ths16-orange px-2.5 py-1 font-ths16-mono text-xs font-bold tracking-[0.2em] text-ths16-bg">001 / 042</span>
<span class="font-ths16-mono text-xs tracking-[0.2em] text-ths16-mut">STUDIO — BERLIN / NYC</span>
</div>
<h1 class="mt-7 text-[clamp(44px,8vw,96px)] leading-[0.9] font-bold tracking-[-0.045em] uppercase">The web <em class="text-ths16-lime">was never</em> meant to <span class="mt-2 inline-block -rotate-1 bg-ths16-orange px-3 text-ths16-bg">look safe.</span></h1>
<div class="mt-8 grid gap-8 border-t-2 border-ths16-orange pt-6 md:grid-cols-[1fr_auto]">
<p class="max-w-md font-ths16-mono text-sm leading-relaxed text-ths16-mut">A design studio for brands that would rather be remembered than liked.</p>
<dl class="grid grid-cols-[auto_1fr] gap-x-6 gap-y-1 font-ths16-mono text-xs text-ths16-mut">
<dt>Founded</dt><dd class="text-white">2014</dd>
<dt>Shipped</dt><dd class="text-white">212 brands</dd>
<dt>Awards</dt><dd class="text-white">0 wanted</dd>
</dl>
</div>
<div class="mt-9 flex flex-wrap gap-5">
<a href="#work" class="inline-flex min-h-12 items-center border-2 border-ths16-orange bg-ths16-orange px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-ths16-bg shadow-[8px_8px_0_var(--color-ths16-lime)] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:shadow-[4px_4px_0_var(--color-ths16-lime)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-white motion-reduce:transition-none">[ SEE WORK ]</a>
<a href="#talk" class="inline-flex min-h-12 items-center border-2 border-white px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-white shadow-[8px_8px_0_white] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:bg-white hover:text-ths16-bg hover:shadow-[4px_4px_0_var(--color-ths16-orange)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-ths16-lime motion-reduce:transition-none">[ EMAIL ]</a>
</div>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-ths16-bg: #0a0a0a;
--color-ths16-bg: oklch(0.145 0 0);
--color-ths16-mut: #b5b5b5;
--color-ths16-mut: oklch(0.773 0 0);
--color-ths16-orange: #ff5e1a;
--color-ths16-orange: oklch(0.687 0.208 39.4);
--color-ths16-lime: #c4f048;
--color-ths16-lime: oklch(0.894 0.194 123.2);
--font-ths16-sans: 'Space Grotesk', system-ui, sans-serif;
--font-ths16-mono: 'JetBrains Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.ths-16 {
width: 100%;
min-height: 100svh;
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Brutalist Hero Section in Tailwind CSS
Source: https://codefronts.com/layouts/tailwind-css-hero-sections/tailwind-brutalist-hero-section/
Raw Swiss-punk brutalism — pure black, traffic-cone orange highlight, acid-lime italic, hard 8px offset shadows that collapse on press, and a mono index line. No images, no gradients, no soft anything.
## HTML
```html
<section class="ths-16 grid w-full min-h-svh place-items-center bg-ths16-bg px-5 py-16 font-ths16-sans text-white sm:px-14" aria-label="Brutalist hero">
<div class="w-full max-w-[52rem]">
<div class="flex flex-wrap items-center justify-between gap-3">
<span class="bg-ths16-orange px-2.5 py-1 font-ths16-mono text-xs font-bold tracking-[0.2em] text-ths16-bg">001 / 042</span>
<span class="font-ths16-mono text-xs tracking-[0.2em] text-ths16-mut">STUDIO — BERLIN / NYC</span>
</div>
<h1 class="mt-7 text-[clamp(44px,8vw,96px)] leading-[0.9] font-bold tracking-[-0.045em] uppercase">The web <em class="text-ths16-lime">was never</em> meant to <span class="mt-2 inline-block -rotate-1 bg-ths16-orange px-3 text-ths16-bg">look safe.</span></h1>
<div class="mt-8 grid gap-8 border-t-2 border-ths16-orange pt-6 md:grid-cols-[1fr_auto]">
<p class="max-w-md font-ths16-mono text-sm leading-relaxed text-ths16-mut">A design studio for brands that would rather be remembered than liked.</p>
<dl class="grid grid-cols-[auto_1fr] gap-x-6 gap-y-1 font-ths16-mono text-xs text-ths16-mut">
<dt>Founded</dt><dd class="text-white">2014</dd>
<dt>Shipped</dt><dd class="text-white">212 brands</dd>
<dt>Awards</dt><dd class="text-white">0 wanted</dd>
</dl>
</div>
<div class="mt-9 flex flex-wrap gap-5">
<a href="#work" class="inline-flex min-h-12 items-center border-2 border-ths16-orange bg-ths16-orange px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-ths16-bg shadow-[8px_8px_0_var(--color-ths16-lime)] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:shadow-[4px_4px_0_var(--color-ths16-lime)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-white motion-reduce:transition-none">[ SEE WORK ]</a>
<a href="#talk" class="inline-flex min-h-12 items-center border-2 border-white px-6 font-ths16-mono text-sm font-bold tracking-[0.12em] text-white shadow-[8px_8px_0_white] transition-[translate,box-shadow,background-color] duration-100 hover:translate-x-1 hover:translate-y-1 hover:bg-white hover:text-ths16-bg hover:shadow-[4px_4px_0_var(--color-ths16-orange)] active:translate-x-2 active:translate-y-2 active:shadow-none focus-visible:outline-3 focus-visible:outline-offset-[12px] focus-visible:outline-ths16-lime motion-reduce:transition-none">[ EMAIL ]</a>
</div>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-ths16-bg: #0a0a0a;
--color-ths16-bg: oklch(0.145 0 0);
--color-ths16-mut: #b5b5b5;
--color-ths16-mut: oklch(0.773 0 0);
--color-ths16-orange: #ff5e1a;
--color-ths16-orange: oklch(0.687 0.208 39.4);
--color-ths16-lime: #c4f048;
--color-ths16-lime: oklch(0.894 0.194 123.2);
--font-ths16-sans: 'Space Grotesk', system-ui, sans-serif;
--font-ths16-mono: 'JetBrains Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.ths-16 {
width: 100%;
min-height: 100svh;
}
```How this works
Shadows as material. Both CTAs carry a hard offset shadow; hover halves it and active: removes it while translating by the same distance — the button appears to be pushed flat into the page.
Rotation on inline-block only. The LOOK SAFE. highlight is inline-block -rotate-1; transforms don't apply to inline boxes, so the display change is load-bearing.
Make it yours
- Swap orange/lime tokens for
#ff2e63/#08d9d6for a cyber-punk variant. - Remove the index rail for a barer poster.
- Use
font-stretchon Space Grotesk alternatives for wider letterforms.
Gotchas — read before shipping
- Pure white text on pure black can halate; the body copy uses
#b5b5b5. - Offset shadows extend the visual box — leave padding so they don't clip at the viewport edge.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Plain utilities — Tailwind v4's floor only.