What breakpoints should I use for responsive design?
Add a breakpoint where the layout starts to look wrong, not at device sizes. If you need defaults, 40rem, 48rem, 64rem and 80rem cover most cases.
/* Mobile styles are the default — no query needed */
@media (min-width: 40rem) { /* 640px — large phone, small tablet */ }
@media (min-width: 48rem) { /* 768px — tablet */ }
@media (min-width: 64rem) { /* 1024px — laptop */ }
@media (min-width: 80rem) { /* 1280px — desktop */ }#Write mobile-first
Style the small screen with no query, then use min-width to add complexity as space allows. This means the simplest layout needs the least CSS, and you never have to undo desktop styles for phones.
#Use rem, not px
A px breakpoint ignores the reader's font size. With rem, someone using larger text switches to the simpler layout sooner — which is usually what they want, since their text now needs more room.
#Chasing devices is a losing game
There are hundreds of screen widths and the list changes every year. Resize the browser slowly instead: when the line length gets uncomfortable or the columns get cramped, that is your breakpoint. It might be 53rem. That is fine.
#Many layouts need no breakpoints at all
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
}Three columns on a desktop, two on a tablet, one on a phone — no media queries. Prefer this whenever the layout allows it.
Fluid type does the same for text:
h1 { font-size: clamp(2rem, 5vw, 4rem); }#Container queries for components
.card-wrap { container-type: inline-size; }
@container (min-width: 30rem) {
.card { grid-template-columns: 8rem 1fr; }
}This asks how much space the component has rather than the viewport — so the same card works in a sidebar and in a full-width grid without knowing where it is.