Comprehensive guidelines for responsive web design including mobile-first approach, flexible layouts, media queries, and cross-device optimization
Install
npx skills add https://github.com/mindrally/skills --skill responsive-designSKILL.md
Responsive Design Guidelines
Core Principles
- Write semantic HTML to improve accessibility and SEO
- Use CSS for styling, avoiding inline styles
- Ensure responsive design using media queries and flexible layouts
- Prioritize accessibility by using ARIA roles and attributes
- Design mobile-first, then enhance for larger screens
Mobile-First Approach
Strategy
- Start with styles for the smallest viewport
- Add complexity through progressive enhancement
- Base styles work without media queries
- Media queries add features for larger screens
Benefits
- Forces prioritization of essential content
- Improves performance on mobile devices
- Ensures core functionality works everywhere
- Reduces CSS complexity and specificity issues
/* Base styles for mobile */
.container {
padding: 1rem;
}
/* Tablet and up */
@media (min-width: 768px) {
.container {
padding: 2rem;
}
}
/* Desktop and up */
@media (min-width: 1024px) {
.container {
max-width: 1200px;
margin: 0 auto;
}
}
Flexible Layouts
Flexbox
- Use for one-dimensional layouts (row or column)
- Leverage
flex-wrapfor responsive wrapping - Use
gapfor consistent spacing - Combine with media queries for layout changes
CSS Grid
- Use for two-dimensional layouts
- Leverage
auto-fitandauto-fillfor responsive grids - Use
minmax()for flexible track sizing - Combine
frunits with fixed minimums
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1rem;
}
Container Queries
- Style components based on container size, not viewport
- Use for truly reusable components
- Define containers with
container-type
Responsive Typography
Fluid Typography
- Use
clamp()for responsive font sizes - Set minimum, preferred, and maximum values
- Avoid text that's too small on mobile or too large on desktop
h1 {
font-size: clamp(1.5rem, 4vw + 1rem, 3rem);
}
Units
- Use
remfor scalable typography - Base
remon user's browser settings - Use
emfor component-relative sizing - Avoid fixed
pxvalues for font sizes
Responsive Images
Srcset and Sizes
- Use
srcsetfor multiple image resolutions - Use
sizesto indicate display size at breakpoints - Let browser choose optimal image
<img
src="image-800.jpg"
srcset="image-400.jpg 400w, image-800.jpg 800w, image-1200.jpg 1200w"
sizes="(max-width: 600px) 100vw, (max-width: 1000px) 50vw, 800px"
alt="Description"
>
Picture Element
- Use for art direction (different crops at different sizes)
- Provide fallback with
<img>element - Use media attributes for breakpoint-specific sources
Performance
- Include
widthandheightattributes to prevent layout shift - Use
loading="lazy"for below-fold images - Consider
aspect-ratioCSS property
Media Queries
Common Breakpoints
/* Small phones */
@media (min-width: 320px) { }
/* Large phones */
@media (min-width: 480px) { }
/* Tablets */
@media (min-width: 768px) { }
/* Laptops/Desktops */
@media (min-width: 1024px) { }
/* Large screens */
@media (min-width: 1280px) { }
/* Extra large screens */
@media (min-width: 1536px) { }
Feature Queries
- Use
@supportsfor feature detection - Provide fallbacks for unsupported features
- Test for specific CSS properties
Preference Queries
prefers-color-schemefor dark/light modeprefers-reduced-motionfor animation preferencesprefers-contrastfor contrast preferences
Touch Targets
Sizing
- Minimum 44x44 pixels for touch targets
- Provide adequate spacing between targets
- Consider thumb reach zones on mobile
Interaction
- Don't rely solely on hover states
- Provide touch alternatives for hover interactions
- Use
@media (hover: hover)for hover-capable devices
Viewport Configuration
Meta Tag
<meta name="viewport" content="width=device-width, initial-scale=1">
Best Practices
- Always include viewport meta tag
- Don't disable user scaling (avoid
user-scalable=no) - Test with pinch-to-zoom enabled
- Ensure content is usable at 200% zoom
Testing
Tools
- Browser DevTools device emulation
- Real device testing when possible
- Lighthouse for performance audits
- W3C validators for code quality
Checklist
- Test at multiple viewport sizes
- Test landscape and portrait orientations
- Test with touch and mouse input
- Test with keyboard navigation
- Verify images load appropriate sizes
- Check typography readability
- Verify touch targets are adequate
- Test with browser zoom
Performance Considerations
Critical CSS
- Inline critical above-fold CSS
- Defer non-critical stylesheets
- Minimize render-blocking resources
Asset Optimization
- Compress images appropriately
- Use modern formats (WebP, AVIF)
- Lazy load below-fold content
- Consider responsive loading strategies
Related skills
vercel-react-best-practicesvercel-labs751KReact and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.vercel-composition-patternsvercel-labs361KReact composition patterns that scale. Use when refactoring components with boolean prop proliferation, building flexible component libraries, or designing reusable APIs. Triggers on tasks involving compound components, render props, context providers, or component architecture. Includes React 19 API changes.vercel-react-view-transitionsvercel-labs135KGuide for implementing smooth, native-feeling animations using React's View Transition API (`<ViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter/exit of components, animate list reorder, implement directional (forward/back) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions viewpick-ui-libraryemilkowalski124KPick the right library for a given frontend task from a curated, opinionated list — numbers, OTP inputs, charts, command menus, virtualization, drag and drop, toasts, state, styling, and more. Only runs when explicitly invoked; it does not trigger on its own.