Themes & plugins Intro
Mobile-first is a question of order, not taste
Starting narrow leaves you fewer decisions. Starting wide means deciding what to throw away at every step — and that decision never ends.
Technote
Why desktop-built layouts break on phones, and the structural fixes — building layouts that do not break instead of adding more breakpoints.
8 articles
Themes & plugins Intro
Starting narrow leaves you fewer decisions. Starting wide means deciding what to throw away at every step — and that decision never ends.
Themes & plugins Intro
Breakpoints named after devices go stale every year. Widen a component slowly, note where it stops working, and that width is your breakpoint.
Themes & plugins Practical
Re-declaring heading sizes at every breakpoint only adds maintenance. clamp() puts the minimum, the fluid middle and the maximum on one line and removes it.
Themes & plugins Practical
repeat(3, 1fr) does not promise three equal columns. One code block or unbroken string inside pushes its track wider, and the whole layout leaves the screen.
Themes & plugins Practical
scrollWidth matches the viewport and yet the screen is visibly clipped. An ancestor absorbed the overflow — so measure element rectangles instead.
Themes & plugins Practical
A cursor is one pixel; a fingertip is not. How to grow the hit area without growing the visuals — and why hover-only affordances simply do not exist…
Themes & plugins Practical
The hamburger is the answer when there are many destinations. If three or four carry the traffic, showing them always beats hiding them.
Themes & plugins Advanced
position: sticky throws no error when it fails. Check three things in order — a threshold, room in the parent, an ancestor's overflow — and the cause is…