Skip to content
Back to skills

Responsive Design

ASecurity

This skill should be used when the user is implementing responsive layouts, choosing breakpoints, building mobile-first designs, using CSS container queries, implementing responsive images (srcset, picture), sizing touch targets, designing responsive navigation, or adapting tables for mobile. Covers mobile-first philosophy, breakpoint strategy, fluid grids with CSS Grid, container queries, responsive images, touch target sizing (44x44px minimum), and responsive tables.

  • 34 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 26, 2026
ai-agentsrustreact

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 26, 2026

npx -y skills add oborchers/fractional-cto --skill responsive-design --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Responsive Design?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Responsive Design
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/oborchers-responsive-design/badge)](https://www.skillsdirectory.com/skills/oborchers-responsive-design)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: responsive-design
description: This skill should be used when the user is implementing responsive layouts, choosing breakpoints, building mobile-first designs, using CSS container queries, implementing responsive images (srcset, picture), sizing touch targets, designing responsive navigation, or adapting tables for mobile. Covers mobile-first philosophy, breakpoint strategy, fluid grids with CSS Grid, container queries, responsive images, touch target sizing (44x44px minimum), and responsive tables.
version: 1.0.0
---

# Mobile-First Is Not a Technical Strategy — It Is a Content Strategy

Mobile-first forces content prioritization. When you design for 320px first, you must decide what actually matters. Desktop is the easy case — there is room for everything. Mobile reveals what is essential. Start narrow, enhance wide. Use `min-width` media queries exclusively (progressive enhancement).

## Breakpoint Reference

Define breakpoints based on common device classes. Use `min-width` (mobile-first) exclusively.

| Name | Range | Min-Width Query | Typical Devices |
|------|-------|----------------|-----------------|
| **xs** | 0-479px | (base styles) | Small phones |
| **sm** | 480-639px | `@media (min-width: 480px)` | Large phones |
| **md** | 640-767px | `@media (min-width: 640px)` | Small tablets |
| **lg** | 768-1023px | `@media (min-width: 768px)` | Tablets, small laptops |
| **xl** | 1024-1279px | `@media (min-width: 1024px)` | Laptops, desktops |
| **2xl** | 1280px+ | `@media (min-width: 1280px)` | Large desktops |

**Rule:** Design for xs first. Add complexity at each breakpoint. Never start with desktop and subtract.

## Fluid Grids

Use CSS Grid `auto-fit`/`auto-fill` with `minmax()` for grids that reflow without media queries. Use `clamp()` for fluid sizing that interpolates between a minimum and maximum.

```css
/* Responsive card grid — no media queries needed */
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px;
}

/* Fluid container padding */
.container {
  padding-inline: clamp(16px, 4vw, 48px);
  max-width: 1200px;
  margin-inline: auto;
}
```

## Container Queries

Container queries decouple component responsiveness from the viewport. A card in a sidebar and a card in the main content area can respond to their own available space.

```css
.card-wrapper {
  container-type: inline-size;
  container-name: card;
}

@container card (min-width: 400px) {
  .card { flex-direction: row; }
}

@container card (max-width: 399px) {
  .card { flex-direction: column; }
}
```

**Use container queries when:** a component appears in multiple layout contexts (sidebar, main, modal) and must adapt to its container, not the viewport.

## Responsive Images

Use `srcset` for resolution switching and `<picture>` for art direction. Lazy-load below-fold images. Set `fetchpriority="high"` on the LCP image.

| Attribute | Purpose |
|-----------|---------|
| `srcset` + `sizes` | Browser selects the best resolution based on viewport and pixel density |
| `<picture>` + `<source>` | Art direction — different crops or aspect ratios per breakpoint |
| `loading="lazy"` | Defer loading for images below the fold |
| `fetchpriority="high"` | Prioritize the Largest Contentful Paint image |
| `width` + `height` | Reserve space to prevent CLS (see `craftsmanship-polish` for CLS rules) |

```html
<picture>
  <source srcset="/img/hero-wide.avif" media="(min-width: 768px)" type="image/avif" />
  <source srcset="/img/hero-wide.webp" media="(min-width: 768px)" type="image/webp" />
  <source srcset="/img/hero-narrow.avif" type="image/avif" />
  <source srcset="/img/hero-narrow.webp" type="image/webp" />
  <img src="/img/hero-narrow.jpg" alt="Hero" width="800" height="600"
       fetchpriority="high" decoding="async" />
</picture>
```

## Responsive Typography

Use `clamp()` for fluid type scaling. See the `typography` skill for the full `clamp()` value table. Never use pure `vw` alone — it becomes unreadable on small screens and enormous on large ones.

## Touch Targets

Apply the 44x44px minimum touch target and 8px spacing rules from the `accessibility-inclusive-design` skill. On mobile, extend hit areas with padding:

```css
/* Extend hit area with padding */
.icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: 10px;
}
```

## Navigation Patterns

Choose the navigation pattern based on item count and importance.

| Pattern | Items | Best For | Mobile Behavior |
|---------|-------|----------|-----------------|
| **Hamburger menu** | 5+ | Content-heavy sites, secondary nav | Slide-in drawer or full-screen overlay |
| **Bottom tabs** | 3-5 | Mobile apps, high-frequency nav | Fixed at bottom, always visible |
| **Priority+** | Variable | Primary nav with overflow | Show as many items as fit, collapse rest into "More" |
| **Full-screen overlay** | Any | Marketing sites, minimal nav | Covers entire viewport with large tap targets |

**Rule:** On mobile, the most important actions must be reachable with one thumb. Place primary navigation within the bottom 60% of the screen when possible.

## Responsive Tables

Tables on mobile require adaptation. Choose the pattern based on data complexity.

| Pattern | When to Use | How |
|---------|-------------|-----|
| **Horizontal scroll** | Simple data, few columns | `overflow-x: auto` on table wrapper |
| **Card transformation** | Complex data, many columns | Each row becomes a stacked card on mobile |
| **Column priority** | Some columns more important | Hide low-priority columns on small screens, show on hover or expand |

## Mobile Viewport Height

Use `100dvh` (dynamic viewport height) instead of `100vh` on mobile. The `vh` unit does not account for browser chrome (address bar, toolbar), causing content to be hidden behind UI elements.

## Anti-Patterns

| Anti-Pattern | Why It Fails | Fix |
|-------------|-------------|-----|
| Fixed-width layouts (e.g., `width: 960px`) | Broken on every viewport except one | Use fluid widths, `max-width`, and `minmax()` |
| Horizontal scroll on body | Frustrating, signals broken layout | Audit for elements exceeding viewport width |
| Tiny touch targets (<44px) | Misclicks, accessibility failure | Apply touch target rules (see `accessibility-inclusive-design` skill) |
| Desktop-first with `max-width` overrides | Fragile, constantly undoing styles | Rewrite mobile-first with `min-width` queries |
| Media query soup (20+ breakpoints) | Unmaintainable, overlapping rules | Consolidate to 4-6 breakpoints, use fluid techniques |
| `100vh` on mobile | Content hidden behind browser chrome | Use `100dvh` or `100svh` |
| Pure `vw` for font size | Unreadable on mobile, enormous on 4K | Use `clamp()` (see `typography` skill) |

## Cross-Media Notes

- **Responsive is web-specific** but the principle of "adapt to the medium" is universal. Presentations must work on projector screens and laptop monitors. Documents must work in A4 and Letter formats.
- **Presentations:** Design slides at 16:9 but test at lower resolutions. Ensure text is readable from the back of the room (minimum 24pt body, 36pt headings).
- **Documents:** Use responsive margins — wider for print, narrower for screen reading. Test PDF rendering on mobile devices.

## Examples

Working implementations in `examples/`:
- **`examples/fluid-grid-and-responsive-images.md`** — Responsive card grid with auto-fit, responsive images with srcset, and touch-target-safe buttons in CSS/Tailwind/React

## Review Checklist

When reviewing or building responsive designs:

- [ ] Styles are written mobile-first using `min-width` media queries (no `max-width`)
- [ ] Breakpoints align with the 6-level reference table (xs through 2xl)
- [ ] Card grids use `auto-fit`/`auto-fill` with `minmax()` for media-query-free reflow
- [ ] Container queries used for components that appear in multiple layout contexts
- [ ] All images use `srcset` + `sizes` or `<picture>` for responsive loading
- [ ] LCP image has `fetchpriority="high"` and all below-fold images have `loading="lazy"`
- [ ] All images have `width` and `height` attributes (see `craftsmanship-polish` for CLS rules)
- [ ] Touch targets meet accessibility requirements (see `accessibility-inclusive-design` skill)
- [ ] Typography uses `clamp()` for fluid scaling (see `typography` skill for values)
- [ ] `100dvh` used instead of `100vh` for full-height mobile layouts
- [ ] Tables adapt on mobile (horizontal scroll, card transformation, or column priority)
- [ ] Navigation pattern is appropriate for item count and collapses gracefully on mobile

Files in this skill

  • SKILL.md8.5 KB
  • examples/fluid-grid-and-responsive-images.md8.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.