Typography Unit Converter – px, pt, rem, em, Pica and More
Type gets measured differently depending on where it lives. A stylesheet talks in px, rem and vw; a print specification talks in points, picas, didots and ciceros; a Word document stores everything internally as twips; and Japanese print CSS uses Q. This typography unit converter puts all nineteen of those units on one page, converts any of them into any other, and shows the working so the answer is verifiable rather than magic.
How the Conversion Works
Every value is first resolved into CSS pixels, then converted out into the target unit. That single pivot is what makes an all-units table possible from one input. The anchor is the CSS reference pixel: 1 in = 96 px = 72 pt = 6 pc = 25.4 mm. From there the rest falls out — a point is 96 / 72 = 1.3333 px, a pica is twelve of those at 16 px, a twip is 1/1440 in, a Q is a quarter millimetre, and a didot point is 0.3759 mm. Converting 12 pt to pixels is therefore 12 ÷ 72 = 0.1667 in × 96 = 16 px, which the step-by-step panel prints in full.
Relative Units Need Context
Half the units here have no fixed size at all. rem resolves against the root font size; em, %, ex and ch resolve against the font size of the containing element. That is why the tool asks for a root font size and a parent font size instead of silently assuming 16 px. Set the parent to 20 px and 1.5em becomes 30 px — which is 1.875rem, not 1.5rem. That gap between em and rem inside a nested container is the single most common typography bug in CSS, and the nested-em cascade panel shows it compounding level by level.
1ex is the real x-height of the loaded typeface and 1ch is the advance width of its zero glyph. Both vary by font, so the converter exposes them as editable ratios defaulting to 0.5. Enter the true metrics from your font file for a production-accurate answer.Which Point Are You Using?
"Point" is not one unit. CSS, PDF and every modern design tool use the PostScript point of exactly 1/72 inch. Classical typesetting and TeX keep the older printer's point of 1/72.27 inch. Continental European print uses the Didot point of 0.3759 mm, roughly 6.6% larger. The point-standard selector switches the whole table between them, so a specification written in Paris in 1960 and one written in Figma yesterday can be compared honestly.
Print Output and DPI
CSS always assumes 96 DPI, but a press does not. A 10 pt heading is 0.1389 in tall, which is 13.33 px on screen and 41.67 device pixels in a 300 DPI export. The device-pixel strip shows the same size at 72, 96, 150, 300 and 600 DPI at once — useful when preparing artwork for print, checking a PDF export, or sizing raster assets for a high-density display.
Type Scales and Fluid Type
Beyond one-off conversions, the tool builds a modular type scale from a base size and a ratio — size(n) = base × ratioⁿ — with named ratios from Minor Second (1.067) through Major Third (1.25) to the Golden Ratio (1.618). Every step is rendered in px, rem and pt, with a copyable block of CSS custom properties. The fluid mode solves the other half of the problem: given a minimum and maximum size and the viewport range they should span, it derives the linear interpolation and wraps it in clamp(), then charts the flat-ramp-flat curve the rule actually produces.
Choosing Units Well
For screen work, prefer rem for font sizes. Browsers expose a font-size preference that changes the root size, so rem-based type scales with the reader while px-based type ignores them outright. Reserve px for values that genuinely must not scale, such as hairline borders. Avoid chained em font sizes, which compound through nesting. And keep a clamp() rule's bounds in rem: a middle term of pure vw can stop responding to zoom entirely and fail WCAG 1.4.4. The legibility badge flags any result that lands below the roughly 12 px / 9 pt comfortable-reading threshold, or above 200 px where a unit mix-up is the likelier explanation.
Batch Work
Porting an existing stylesheet rarely means converting one number. Paste a whole list — 12px, 14px, 16px, 24px, 32px — and the batch mode parses each token, honours any per-token unit suffix, converts everything against the same context, and exports the result as CSV. Tokens it cannot parse are listed back with a reason rather than quietly dropped.