📱 Responsive Design

Mobile-First Responsive Design: A Complete 2026 Workflow

By Shubham Sharma··13 min read
Website mockup shown on phone, tablet, and desktop

Over 60% of all web traffic in 2026 comes from phones. If your site doesn't feel right on a 5-inch screen, you're losing more than half your audience — and Google's mobile-first indexing means you're losing your search rankings too. Mobile-first design solves this by starting from the smallest screen and progressively enhancing for bigger ones. I switched to this approach four years ago on a client dashboard and immediately cut my media-query count roughly in half.

Why mobile-first (beyond the buzzword)

  • Forces you to prioritise content — small screens have no room to hide sloppy hierarchy
  • Smaller base CSS = faster first paint on the slowest devices (your worst users)
  • Easier to scale up than down — adding is safer than removing
  • Matches Google's mobile-first indexing (the mobile version is what ranks)

The min-width media query pattern

/* base = mobile */
.card { padding: 1rem; font-size: 1rem; }

/* progressively enhance upward */
@media (min-width: 48em)  { .card { padding: 1.5rem; } }
@media (min-width: 64em)  { .card { padding: 2rem; font-size: 1.125rem; } }
@media (min-width: 90em)  { .card { padding: 2.5rem; } }

Use em (or rem) in your media queries instead of px. It means users who bump up their default font size get a wider breakpoint automatically — a subtle accessibility win most sites miss.

My default breakpoint set

  • 48em (~768px) — landscape phone / small tablet
  • 64em (~1024px) — tablet / small laptop
  • 80em (~1280px) — desktop
  • 96em (~1536px) — large desktop

That's it. I don't add a breakpoint until the layout actually breaks — if content flows fine, no breakpoint is needed.

Container queries: the responsive we always wanted

Media queries respond to the viewport. Container queries respond to a component's parent — so the same card can render differently in a sidebar, a hero, or a footer, without knowing what viewport size it's at.

.sidebar { container-type: inline-size; }

.card { display: block; }

@container (min-width: 400px) {
  .card { display: flex; gap: 1rem; }
}

This is the single biggest win for component libraries — a Card component that's actually reusable in any layout without prop-based size hacks.

Fluid units to use

  • clamp(min, ideal, max) — the workhorse for fluid type, spacing, and widths
  • rem — accessibility-friendly base unit; respects user font-size settings
  • % and fr — proportional layouts
  • min() / max() — responsive constraints without media queries
  • svh / lvh / dvh — small, large, and dynamic viewport heights (survive mobile URL bars)

Touch targets and hit areas

The WCAG minimum is 44×44 CSS pixels for any interactive element. On a real phone, anything smaller misses half the taps. Set a min-width and min-height on every button and link — even icon-only ones.

button, a.btn { min-height: 44px; min-width: 44px; padding: 0.75rem 1rem; }

Test on real devices

Chrome DevTools' device mode is fine for layout, but it lies about touch, network throttling, and font rendering. I keep a cheap Android phone on my desk and check every important build on it. Half my worst bugs — sticky headers that jump when the URL bar hides, tap targets I can't hit with a thumb — never showed up in DevTools.

Frequently asked questions

Are media queries dead?

No — they're still needed for viewport-level changes like nav orientation and page layout. Container queries complement them, they don't replace them.

Should I still use px or switch to rem?

rem for font-size, spacing, and media queries (respects user zoom). px is fine for borders, shadows, and things that shouldn't scale. em when you want a value to compound with the current font-size (padding on buttons, for example).

What breakpoints does Bootstrap use?

576, 768, 992, 1200, and 1400 px. If you're building custom, don't copy them mechanically — pick breakpoints where your content breaks.

Is desktop-first ever the right call?

Only for internal tools where you know 100% of users are on desktop (data-heavy dashboards, admin panels). For anything public-facing, always mobile-first.

Enjoyed this article?

Share it with a fellow developer or explore more tutorials in our blog.

More articles

Related articles