Fluid type or fixed breakpoint sizes, which scales better?
On this page
Fluid type scales better for most modern layouts, provided you clamp it so it stays readable at the extremes. Fluid sizing grows and shrinks text smoothly with the viewport, so type looks right at every width rather than only at the few you tested, while fixed breakpoint sizes give you exact control at each step at the cost of visible jumps between them. The honest call balances smoothness against control, and for the wide and unpredictable range of screens in use today, fluid type with sensible minimum and maximum bounds is the better default. The fixed approach is a tool, not the only way to be responsive.
Fluid type wins on the in-between widths, which is almost all of them. Set a heading to scale with the viewport and it is sized correctly on a small phone, a large phone, a small tablet, a laptop, and every awkward width nobody anchored a breakpoint to. Stepped sizing, by contrast, holds one size across a whole range and then snaps to the next at a breakpoint, so a heading can look slightly too big at the bottom of one range and slightly too small at the top of another, and the snap itself is visible if the user happens to resize across it. Fluid spreads the adjustment continuously instead of saving it all for a few hard edges.
The catch, and the reason raw fluid scaling fails, is the extremes. Pure viewport-based sizing keeps growing forever, so a hero heading that looks great on a laptop becomes absurd on a wide desktop monitor and can shrink to unreadable on a very narrow phone. Clamping fixes this: you give the size a floor and a ceiling and let it scale freely only between them, so it flexes through the common widths but refuses to get smaller than legible or larger than tasteful. CSS makes this a single declaration with a minimum, a preferred fluid value, and a maximum, which is why fluid-with-limits has become practical rather than fragile.
One place the rule bends: fixed stepped sizes still have real uses, and fluid is not a blanket answer. When you need a specific size at a specific breakpoint for a tightly art-directed layout, or when a smooth ramp would let a heading and its body text drift into the wrong relationship, explicit per-breakpoint sizes give you control that a single fluid curve cannot. The strongest type systems often mix the two, fluid scaling for the bulk of the range with deliberate overrides where exactness earns its keep. The mistake is treating a handful of fixed sizes as the whole of responsiveness and calling it done.
Reach for fluid type with min and max bounds as your default, set the floor at the smallest size that stays readable and the ceiling at the largest that stays tasteful, and let the type breathe smoothly between them. Add fixed overrides only where a specific width genuinely needs a specific size. Lean fluid with limits, keep stepped sizing for the exceptions, and your type will read well at every width instead of only at the ones you remembered to check.