Fontwell

Specimen & licence desk for open fonts

Sheet of 1,950 families Proofed 15 Oct 2026 google/fonts @ 9430147

Tool · type-scale generator

What font sizes should my headings be?

Multiply a base size by a fixed ratio for each step up (and divide for each step down). With a 16 px base and a 1.25 ratio the steps are 20, 25, 31.25, 39.06 and 48.83 px. The generator also turns each step into a fluid clamp() value.

Major third (1.25), base 16 → 18 px, 390 → 1440 px viewport
StepSmall (px)Large (px)Fluid sizePreview
+548.8354.93clamp(3.0519rem, 2.9103rem + 0.581vw, 3.4331rem)Ag
+439.0643.95clamp(2.4413rem, 2.3277rem + 0.4657vw, 2.7469rem)Ag
+331.2535.16clamp(1.9531rem, 1.8624rem + 0.3724vw, 2.1975rem)Ag
+22528.13clamp(1.5625rem, 1.4898rem + 0.2981vw, 1.7581rem)Ag
+12022.5clamp(1.25rem, 1.192rem + 0.2381vw, 1.4063rem)Ag
base1618clamp(1rem, 0.9536rem + 0.1905vw, 1.125rem)Ag
-112.814.4clamp(0.8rem, 0.7629rem + 0.1524vw, 0.9rem)Ag
-210.2411.52clamp(0.64rem, 0.6103rem + 0.1219vw, 0.72rem)Ag
:root {
  --step-5: clamp(3.0519rem, 2.9103rem + 0.581vw, 3.4331rem);
  --step-4: clamp(2.4413rem, 2.3277rem + 0.4657vw, 2.7469rem);
  --step-3: clamp(1.9531rem, 1.8624rem + 0.3724vw, 2.1975rem);
  --step-2: clamp(1.5625rem, 1.4898rem + 0.2981vw, 1.7581rem);
  --step-1: clamp(1.25rem, 1.192rem + 0.2381vw, 1.4063rem);
  --step-0: clamp(1rem, 0.9536rem + 0.1905vw, 1.125rem);
  --step-m1: clamp(0.8rem, 0.7629rem + 0.1524vw, 0.9rem);
  --step-m2: clamp(0.64rem, 0.6103rem + 0.1219vw, 0.72rem);
}

How the numbers are computed

Each step is size = base × ratiostep, rounded to two decimals for display. For the fluid value, the generator draws a straight line between the small-screen size at the small viewport and the large-screen size at the large viewport: the slope is (large − small) ÷ (large viewport − small viewport), expressed in vw, and the intercept is converted to rem assuming a 16 px root. clamp() then holds the size within the two endpoints outside that range.

Worked check for step +2 with the defaults: small = 16 × 1.25² = 25 px, large = 18 × 1.25² = 28.125 px; slope = 3.125 ÷ 1050 = 0.2976 vw; intercept = 25 − 0.002976 × 390 = 23.84 px = 1.49 rem. The tool prints clamp(1.5625rem, 1.49rem + 0.2976vw, 1.7578rem).

Ratios below 1.2 suit dense interfaces with many heading levels; 1.25 to 1.333 is a common middle ground for articles; larger ratios create dramatic headlines but run out of room after three or four steps on small screens. Users can still zoom: clamp() with a rem component keeps text resizable. Pair the scale with a family that has enough weights, as explained in choosing a UI font, and see variable fonts for in-between weights.

Sources