A website that looks great on a laptop might be a disaster on a phone. Responsive
design is about making your site adapt to any screen size. And the most important
tool for that is the @media rule.
The @media Rule
Media queries let you apply CSS only when certain conditions are true โ like the screen being a certain width. Think of them as if-statements for styles.
/* Base styles for all screens */
body {
font-size: 16px;
}
/* Styles for screens wider than 768px */
@media (min-width: 768px) {
body {
font-size: 18px;
}
}
In this example, font size jumps from 16px to 18px when the screen is at least 768px wide. Small screens get the smaller font, larger screens get the bigger one.
Try it Yourself โBreakpoints
A breakpoint is the screen width where your layout changes. Common breakpoints are:
- 480px โ small phones
- 768px โ tablets
- 1024px โ small laptops
- 1200px โ desktops
/* Default: mobile styles */
@media (min-width: 768px) {
/* tablet and up */
}
@media (min-width: 1024px) {
/* desktop */
}
Build your base styles for mobile first, then add layers for larger screens. That approach is called mobile-first, and it is the standard practice today.
Min-Width vs Max-Width
min-width means "apply these styles when the screen is at least
this wide." max-width means "apply when the screen is at most
this wide."
/* Mobile-first โ min-width */
@media (min-width: 768px) { /* tablet up */ }
/* Desktop-first โ max-width */
@media (max-width: 767px) { /* mobile only */ }
Most developers use min-width with a mobile-first approach. It just feels
more natural โ start small and add complexity as the screen grows.
Responsive Layouts
Media queries really shine with layouts. A sidebar that sits beside the content on desktop can stack on top on mobile:
.layout {
display: grid;
grid-template-columns: 1fr;
}
@media (min-width: 768px) {
.layout {
grid-template-columns: 250px 1fr;
}
}
Single column on mobile, two columns on wider screens. Simple, clean, and it works perfectly.