Skip to main content
← 🎨 CSS as a design systemΒ·Module B9 Β· Lesson 9
TaskBuild .footer with display grid, grid-template-columns repeat(auto-fit, minmax(180px, 1fr)), gap var(--space-lg), padding var(--space-2xl) var(--space-lg), background var(--text), color oklch(0.85 0 0). .footer h4 has margin 0 0 var(--space-md), color white, font-size 13px, font-weight 600, text-transform uppercase, letter-spacing 0.05em. .footer ul has list-style none, padding 0, margin 0, display grid, gap 8px. .footer a has color inherit, text-decoration none, font-size 14px. .footer a:hover has color white. Four columns: Brand (with logo + tagline + social), Product (links), Company (links), Legal (links). .footer-bottom has display flex, justify-content space-between, padding var(--space-md) 0, border-top 1px solid white/10, grid-column 1 / -1, color oklch(0.65 0 0), font-size 13px.

Capstone 9: Footer (4-column responsive)

150 XP10 min
Theory

A site footer that scales

Four columns on desktop: Brand + Product + Company + Legal. On tablet it collapses to two columns; on phone, one column stacked. The same auto-fit grid trick from the pricing capstone handles the reflow β€” no media queries required.

The one-line responsive grid

grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)). As the viewport shrinks, the grid engine drops columns one-by-one whenever a card can't hold 180px. On a 375px phone that's one column. On a 1280px desktop, four. Zero conditional CSS.

The typography rules that make footers "look pro"

  • Column headers β€” text-transform: uppercase, letter-spacing: 0.05em, small (13px), colour white. This is the "footer header" visual convention across every SaaS site.
  • Link colour β€” muted (oklch(0.85 0 0)) by default, brightens to full white on hover. transition: color 0.15s for the polish.
  • Dark background + light muted text β€” the standard footer palette. Uses var(--text) (your normal dark text colour) as the background to auto-pick the site's darkest neutral.

The bottom bar

A one-liner separated from the columns by border-top: 1px solid oklch(1 0 0 / 0.1) (10% opaque white). Uses grid-column: 1 / -1 to span every column regardless of how many the grid decided to render.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 15 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.