30 Tailwind CSS Grid Layouts
06 / 30

All 30 in 30 Tailwind CSS Grid Layouts

  1. 01Tailwind Full-Bleed Article Layout for Long-Form Editorial
  2. 02Tailwind Docs Layout with Sticky Table of Contents
  3. 03Tailwind Photo Gallery Grid with auto-fill and Real Images
  4. 04Tailwind Holy Grail Page Layout for a News Site
  5. 05Tailwind Data Table with Subgrid Rows and Status Pills
  6. 06Tailwind Overlapping Card Hero for a Case Study
  7. 07Tailwind Help Center Layout with Fixed Sidebars
  8. 08Tailwind 12 Column Grid System for Marketing Pages
  9. 09Tailwind Bento Grid for a Product Feature Section
  10. 10Tailwind Magazine Spread Layout with Overlapping Headline
  11. 11Tailwind Responsive Card Grid for an Integrations Directory
  12. 12Tailwind CMS Category Grid that Compacts Itself with has()
  13. 13Tailwind Masonry Layout for a Saved Ideas Board
  14. 14Tailwind Hexagon Team Grid with clip-path Avatars
  15. 15Tailwind Subgrid Cards with Perfectly Aligned Buttons
  16. 16Tailwind Analytics Dashboard Layout with Grid App Shell
  17. 17Tailwind Pricing Table with Subgrid and a Featured Plan
  18. 18Tailwind Kanban Board with Scroll Snap Columns
  19. 19Tailwind Video Thumbnail Grid with Zero Layout Shift
  20. 20Tailwind Container Query Card for Reusable Article Teasers
  21. 21Tailwind Diagonal Section Band with skewY Counter-Skew
  22. 22Tailwind Asymmetric Poster Hero with Layered Grid Regions
  23. 23Tailwind Mosaic Photo Wall with a Designed Span Sequence
  24. 24Tailwind Dense Grid Packing for a Mixed-Size Asset Library
  25. 25Tailwind Onboarding Stepper with CSS Counters
  26. 26Tailwind macOS Window Layout with Vibrancy Sidebar
  27. 27Tailwind Scroll Snap Carousel with Peeking Slides
  28. 28Tailwind Status Map UI with Grid Coordinate Pins
  29. 29Tailwind Logo Wall with 1px Gap Hairline Dividers
  30. 30Tailwind Periodic Table Layout with Grid Coordinates
Pure TailwindMIT licensed

Tailwind Overlapping Card Hero for a Case Study

An agency case-study teaser where the results card overlaps the project photograph — the composition every studio site uses, built from shared grid cells instead of absolute offsets, so it scales instead of drifting.

Live Demo
Plain CSSTailwind v4
Try it

Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time

Untitled UI React · Affiliate link

Get Untitled UI Pro

The code

<section class="tgx-06 w-full min-h-svh bg-tgx06-bg font-tgx06-sans px-6 py-10 grid place-items-center">
  <div class="grid grid-cols-12 grid-rows-[repeat(8,minmax(30px,auto))] w-[min(660px,100%)]">
    <figure class="col-start-1 col-end-9 row-start-1 row-end-7 z-10 overflow-hidden rounded-2xl bg-tgx06-shade shadow-[0_24px_50px_-24px_oklch(0.25_0.04_260/0.5)]">
      <img src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?w=900&h=700&q=80&auto=format&fit=crop" alt="Two designers reviewing screens together at a shared desk" loading="lazy" class="w-full h-full object-cover">
    </figure>
    <article class="col-start-6 col-end-13 row-start-4 row-end-9 max-sm:col-start-2 max-sm:col-end-12 z-20 flex flex-col gap-3 rounded-2xl bg-white p-6 shadow-[0_20px_44px_-20px_oklch(0.25_0.04_260/0.45)]">
      <p class="text-[0.66rem] font-semibold tracking-[0.16em] uppercase text-tgx06-accent">Case study · Northwind</p>
      <h3 class="text-[clamp(1.1rem,2.6vw,1.4rem)] leading-[1.22] font-semibold text-tgx06-ink text-balance">Rebuilding a freight console around one grid system</h3>
      <p class="text-[0.85rem] leading-[1.6] text-tgx06-mut">Six screens, one track vocabulary. Support tickets about "the table pushing the sidebar off" went to zero in the first week.</p>
      <dl class="grid grid-cols-3 gap-3 pt-1 border-t border-tgx06-line mt-1">
        <div class="flex flex-col gap-0.5"><dt class="text-[0.62rem] uppercase tracking-[0.1em] text-tgx06-mut">Ship time</dt><dd class="text-[1.05rem] font-semibold tabular-nums text-tgx06-ink">9 wks</dd></div>
        <div class="flex flex-col gap-0.5"><dt class="text-[0.62rem] uppercase tracking-[0.1em] text-tgx06-mut">CLS</dt><dd class="text-[1.05rem] font-semibold tabular-nums text-tgx06-ink">0.00</dd></div>
        <div class="flex flex-col gap-0.5"><dt class="text-[0.62rem] uppercase tracking-[0.1em] text-tgx06-mut">CSS cut</dt><dd class="text-[1.05rem] font-semibold tabular-nums text-tgx06-accent">−62%</dd></div>
      </dl>
      <a href="#0" class="mt-auto inline-flex items-center gap-1.5 min-h-11 text-[0.83rem] font-semibold text-tgx06-accent no-underline hover:underline underline-offset-4 focus-visible:outline-2 focus-visible:outline-tgx06-accent focus-visible:outline-offset-2 rounded">Read the case study <span aria-hidden="true">→</span></a>
    </article>
    <p class="col-start-2 col-end-6 row-start-6 row-end-7 z-30 self-center justify-self-start font-tgx06-mono text-[0.68rem] font-medium text-white bg-black/45 backdrop-blur-sm border border-white/25 rounded-full px-3 py-1.5">6 screens · 1 grid</p>
  </div>
</section>
@import "tailwindcss";

@theme {
  --color-tgx06-bg: #eceaf4;
  --color-tgx06-bg: oklch(0.93 0.015 285);
  --color-tgx06-shade: #d9d6e6;
  --color-tgx06-shade: oklch(0.87 0.02 285);
  --color-tgx06-ink: #22202e;
  --color-tgx06-ink: oklch(0.24 0.02 285);
  --color-tgx06-mut: #5c586e;
  --color-tgx06-mut: oklch(0.46 0.025 285);
  --color-tgx06-line: #e0dde9;
  --color-tgx06-line: oklch(0.9 0.012 285);
  --color-tgx06-accent: #5a3ec8;
  --color-tgx06-accent: oklch(0.46 0.19 285);
  --font-tgx06-sans: 'Inter Tight', system-ui, sans-serif;
  --font-tgx06-mono: 'JetBrains Mono', ui-monospace, monospace;
}

.tgx-06 {
  width: 100%;
  min-height: 100svh;
}
/* Safari < 16.4 backdrop-filter prefix for the badge. */

.tgx-06 p.backdrop-blur-sm {
  -webkit-backdrop-filter: blur(8px);
}

Setup — do this once per project

Skip this if your project already runs Tailwind v4.

1Load Tailwind
<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.

2Add the stylesheetRequiredthe @theme block is what makes the custom utilities exist
@import "tailwindcss";

@theme {
  --color-tgx06-bg: #eceaf4;
  --color-tgx06-bg: oklch(0.93 0.015 285);
  --color-tgx06-shade: #d9d6e6;
  --color-tgx06-shade: oklch(0.87 0.02 285);
  --color-tgx06-ink: #22202e;
  --color-tgx06-ink: oklch(0.24 0.02 285);
  --color-tgx06-mut: #5c586e;
  --color-tgx06-mut: oklch(0.46 0.025 285);
  --color-tgx06-line: #e0dde9;
  --color-tgx06-line: oklch(0.9 0.012 285);
  --color-tgx06-accent: #5a3ec8;
  --color-tgx06-accent: oklch(0.46 0.19 285);
  --font-tgx06-sans: 'Inter Tight', system-ui, sans-serif;
  --font-tgx06-mono: 'JetBrains Mono', ui-monospace, monospace;
}

.tgx-06 {
  width: 100%;
  min-height: 100svh;
}
/* Safari < 16.4 backdrop-filter prefix for the badge. */

.tgx-06 p.backdrop-blur-sm {
  -webkit-backdrop-filter: blur(8px);
}
3Fonts used by this demooptional — skip if you have your own type stack
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preconnect" href="https://images.unsplash.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap">

What changed in the port

Which parts became utilities, which stayed CSS, and why.

  • Real photography makes the overlap legible: with a gradient plate you cannot tell whether the card is over an image or a coloured box, which is the entire visual point of the pattern.
  • The results <dl> is a nested three-column grid inside the overlapping card — proof that a layer is a normal container, not a special case.
  • Product upgrade: the 'Field Notes' filler became a client case-study teaser with real outcome figures, and the chip now states a project fact instead of quoting its own CSS.
Paste this into ChatGPT, Claude, Cursor, or any coding assistant. The block below is pre-framed with everything the AI needs to integrate this demo into your project — markup, styles, scoping notes, and the source URL. Hit Copy and paste straight into your chat.
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: Tailwind Overlapping Card Hero for a Case Study
Source: https://codefronts.com/layouts/tailwind-css-grid-layouts/tailwind-overlapping-card-hero-case-study/

An agency case-study teaser where the results card overlaps the project photograph — the composition every studio site uses, built from shared grid cells instead of absolute offsets, so it scales instead of drifting.
## HTML
```html
<section class="tgx-06 w-full min-h-svh bg-tgx06-bg font-tgx06-sans px-6 py-10 grid place-items-center">
  <div class="grid grid-cols-12 grid-rows-[repeat(8,minmax(30px,auto))] w-[min(660px,100%)]">
    <figure class="col-start-1 col-end-9 row-start-1 row-end-7 z-10 overflow-hidden rounded-2xl bg-tgx06-shade shadow-[0_24px_50px_-24px_oklch(0.25_0.04_260/0.5)]">
      <img src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?w=900&h=700&q=80&auto=format&fit=crop" alt="Two designers reviewing screens together at a shared desk" loading="lazy" class="w-full h-full object-cover">
    </figure>
    <article class="col-start-6 col-end-13 row-start-4 row-end-9 max-sm:col-start-2 max-sm:col-end-12 z-20 flex flex-col gap-3 rounded-2xl bg-white p-6 shadow-[0_20px_44px_-20px_oklch(0.25_0.04_260/0.45)]">
      <p class="text-[0.66rem] font-semibold tracking-[0.16em] uppercase text-tgx06-accent">Case study · Northwind</p>
      <h3 class="text-[clamp(1.1rem,2.6vw,1.4rem)] leading-[1.22] font-semibold text-tgx06-ink text-balance">Rebuilding a freight console around one grid system</h3>
      <p class="text-[0.85rem] leading-[1.6] text-tgx06-mut">Six screens, one track vocabulary. Support tickets about "the table pushing the sidebar off" went to zero in the first week.</p>
      <dl class="grid grid-cols-3 gap-3 pt-1 border-t border-tgx06-line mt-1">
        <div class="flex flex-col gap-0.5"><dt class="text-[0.62rem] uppercase tracking-[0.1em] text-tgx06-mut">Ship time</dt><dd class="text-[1.05rem] font-semibold tabular-nums text-tgx06-ink">9 wks</dd></div>
        <div class="flex flex-col gap-0.5"><dt class="text-[0.62rem] uppercase tracking-[0.1em] text-tgx06-mut">CLS</dt><dd class="text-[1.05rem] font-semibold tabular-nums text-tgx06-ink">0.00</dd></div>
        <div class="flex flex-col gap-0.5"><dt class="text-[0.62rem] uppercase tracking-[0.1em] text-tgx06-mut">CSS cut</dt><dd class="text-[1.05rem] font-semibold tabular-nums text-tgx06-accent">−62%</dd></div>
      </dl>
      <a href="#0" class="mt-auto inline-flex items-center gap-1.5 min-h-11 text-[0.83rem] font-semibold text-tgx06-accent no-underline hover:underline underline-offset-4 focus-visible:outline-2 focus-visible:outline-tgx06-accent focus-visible:outline-offset-2 rounded">Read the case study <span aria-hidden="true">→</span></a>
    </article>
    <p class="col-start-2 col-end-6 row-start-6 row-end-7 z-30 self-center justify-self-start font-tgx06-mono text-[0.68rem] font-medium text-white bg-black/45 backdrop-blur-sm border border-white/25 rounded-full px-3 py-1.5">6 screens · 1 grid</p>
  </div>
</section>
```
## CSS
```css
@import "tailwindcss";

@theme {
  --color-tgx06-bg: #eceaf4;
  --color-tgx06-bg: oklch(0.93 0.015 285);
  --color-tgx06-shade: #d9d6e6;
  --color-tgx06-shade: oklch(0.87 0.02 285);
  --color-tgx06-ink: #22202e;
  --color-tgx06-ink: oklch(0.24 0.02 285);
  --color-tgx06-mut: #5c586e;
  --color-tgx06-mut: oklch(0.46 0.025 285);
  --color-tgx06-line: #e0dde9;
  --color-tgx06-line: oklch(0.9 0.012 285);
  --color-tgx06-accent: #5a3ec8;
  --color-tgx06-accent: oklch(0.46 0.19 285);
  --font-tgx06-sans: 'Inter Tight', system-ui, sans-serif;
  --font-tgx06-mono: 'JetBrains Mono', ui-monospace, monospace;
}

.tgx-06 {
  width: 100%;
  min-height: 100svh;
}
/* Safari < 16.4 backdrop-filter prefix for the badge. */

.tgx-06 p.backdrop-blur-sm {
  -webkit-backdrop-filter: blur(8px);
}
```

How this works

Overlap needs explicit lines on both axes. Auto-placed items refuse to share cells. Stating all four per layer is more classes than CSS, and far easier to art-direct: the numbers are on the thing you are moving.

Stacking is paint order. Grid items form stacking contexts without position, so swapping z-10 and z-20 changes which layer wins with zero layout movement.

Make it yours

  • Deepen the overlap by starting the card a column earlier.
  • Mirror it: photo col-start-5 col-end-13, card col-start-1 col-end-8.
  • Add a third layer — a client logo, a year, a rule — in another shared region with its own z-*.

Gotchas — read before shipping

  • Text over the seam needs its own ground; the card is opaque on purpose.
  • Do not add opacity or transform to the stage — a new stacking context reorders your layers.
  • Keep rows intrinsic (minmax(30px,auto)); fr rows collapse the overlap on short content.

Browser support

ChromeSafariFirefoxEdge
111+16.4+128+111+

Overlap placement is original grid; backdrop-filter is universal since 2022.

Techniques used in this demo

Utilitiesfirst-class utility or variant

Search CodeFronts

Loading…