Responsive Design
Media queries, fluid typography, container queries, and mobile-first.
Overview
Responsive design ensures content looks good on all devices.
Key Concepts
- Mobile-First — Design for small screens first
- Breakpoints — Common device widths
- Fluid Typography — Responsive text sizes
- Container Queries — Parent-based responsive
- Viewport Units — Screen-relative sizing
Code Examples
/* Mobile-first approach */
.container {
padding: 1rem;
}
/* Tablet */
@media (min-width: 768px) {
.container {
padding: 2rem;
max-width: 720px;
margin: 0 auto;
}
}
/* Desktop */
@media (min-width: 1024px) {
.container {
max-width: 960px;
}
}
/* Fluid typography */
html {
font-size: clamp(1rem, 0.9rem + 0.5vw, 1.25rem);
}
h1 {
font-size: clamp(2rem, 1.5rem + 2vw, 3.5rem);
line-height: 1.2;
}
/* Viewport units */
.hero {
height: 100vh;
height: 100dvh; /* Dynamic viewport height */
}
.sidebar {
width: 25vw;
min-width: 200px;
max-width: 300px;
}
/* Container queries */
.card-container {
container-type: inline-size;
container-name: card;
}
@container card (min-width: 400px) {
.card {
display: flex;
gap: 1rem;
}
.card-image {
flex: 0 0 200px;
}
}
@container card (min-width: 600px) {
.card-content {
display: grid;
grid-template-columns: 1fr auto;
}
}
/* Aspect ratio */
.video-wrapper {
aspect-ratio: 16 / 9;
width: 100%;
}
/* Responsive grid */
.responsive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
gap: 1rem;
}
/* Modern media query range syntax */
@media (768px <= width <= 1024px) {
.tablet-only { display: block; }
}
@media (width < 768px) {
.mobile-only { display: block; }
}
Practice
Build a responsive website that works on mobile, tablet, and desktop.