REM to Point Converter

At the default 16px root, 1rem is 12pt. Fill in the formula below with your own rem value and root size, check the result at print size, or paste a stylesheet for a finished print block in pt.

pt per px0.75
Points0pt

Takes whatever your stylesheet says: 16px, 62.5%, 112.5% or 12pt.

Root
Round to

Type a rem value in the first box. A proof of the size appears here, with its print role, picas and millimetres.

Convert a whole stylesheet to pt

Paste CSS and every rem value converts with the root and rounding set above.

Output

Nothing converted yet.

Rem to pt chart at a 16px root

Tailwind and Bootstrap steps included. Pick any rem value to load it into the formula.

REMPixelsPointsPrint roleWhere you see it
10px7.5ptFine printLegal lines
12px9ptCaptionsTailwind text-xs
14px10.5ptBody copyTailwind text-sm
16px12ptBody copyTailwind text-base, Bootstrap 5 h6
18px13.5ptSubheadsTailwind text-lg
20px15ptSubheadsTailwind text-xl, Bootstrap 5 h5
24px18ptHeadingsTailwind text-2xl, Bootstrap 5 h4
28px21ptHeadingsBootstrap 5 h3
30px22.5ptHeadingsTailwind text-3xl
32px24ptHeadingsBootstrap 5 h2
36px27ptHeadingsTailwind text-4xl
40px30ptHeadingsBootstrap 5 h1
48px36ptDisplayTailwind text-5xl
60px45ptDisplayTailwind text-6xl
72px54ptDisplayTailwind text-7xl
96px72ptDisplayTailwind text-8xl

How many points is 1rem?

Twelve, at the browser default root of 16px. Every rem to pt conversion runs on one line:

pt = rem × root size in px × 0.75

The 0.75 never changes. The CSS specification sets 1 inch to 96px and also to 72pt, so 1px is always three quarters of a point. CSS Values Level 4 lists the ratios. The root size is the only number you need to check.

REMRootWorkingResult
1rem16px1 × 16 × 0.7512pt
1.125rem16px1.125 × 16 × 0.7513.5pt
0.875rem16px0.875 × 16 × 0.7510.5pt
1.6rem10px1.6 × 10 × 0.7512pt
1.25rem18px1.25 × 18 × 0.7516.875pt

Your rem values already print

Test what you have before you convert anything. Browsers lay out print pages on the same 96px inch they use on screen, so 1rem at a default root prints at 12pt when the dialog sits at 100% scale. A rem stylesheet reaches paper with no conversion at all.

Converting to pt earns its place in three cases:

Long reading pages go the other way. A reader who set a bigger browser font wants bigger text on paper too. Rem respects this choice and pt overrides it.

The one line alternative

Need fixed sizes across a whole document? Skip converting each value and pin the root inside the print block:

@media print {html { font-size: 12pt; }}

Every rem now resolves against 12pt, so 1.5rem prints at 18pt on every machine and your type scale keeps its ratios. A site on a 62.5% root wants 7.5pt here, since 1rem stood for 10px. Reach for the stylesheet converter when print needs different ratios from screen, or when sign off calls for each pt value in writing.

Find the real root before you trust the number

Typing 16 out of habit causes most wrong answers. Check the rule on html first. Percent roots build on the reader's browser default, so this table assumes 16px:

Rule on htmlRoot1rem prints at
None, or 100%16px12pt
62.5%10px7.5pt
87.5%14px10.5pt
112.5%18px13.5pt
125%20px15pt

To read the live value, open DevTools, select html, then find font-size in the Computed panel.

Fluid roots need one more step. With clamp() or vw on html, the root follows the viewport, and a printed page has its own width. Set the viewport to about 794px, the CSS width of an A4 sheet before margins, then read the computed size. Chrome's Rendering panel has an Emulate CSS media type option for checking print rules at the same time.

Round for whatever receives the number

Browsers and PDF engines accept decimals, so a stylesheet keeps the exact value. Other targets are pickier:

Rounding type sizes is safe. Rounding leading is not. A 13.125pt line height pushed up to 13.5pt adds 15pt across 40 lines, which is one full line of text and a different page break.

What the stylesheet converter leaves alone

The converter reads your source text, so it has no view of computed styles. Everything runs in your browser and nothing gets uploaded. Expect these gaps:

Proof it on paper

Add a box 72pt tall to a test page, print at 100% scale and put a ruler on it. The box should measure 1 inch. A short box means the print dialog or PDF engine rescaled the page after the CSS ran. wkhtmltopdf does this by default unless you pass --disable-smart-shrinking.

Rem to pt questions from print work

How many points is 1 rem?

At the default 16px root, 1rem equals 12pt. The figure moves with the root: 7.5pt at a 10px root, 10.5pt at 14px and 15pt at 20px.

Should I use rem or pt for print CSS?

Keep rem unless a layout needs fixed sizes or a brief names points. Rem still honors a reader's browser font size on paper. For fixed sizes across a full document, set html to 12pt inside the print block and leave every rem as written.

How do I convert pt back to rem?

Divide by 0.75 to get px, then divide by the root. 18pt at a 16px root is 24px, or 1.5rem. At a 16px root, dividing the pt value by 12 gives the same answer. The Point to REM Converter handles other roots.

Is 1pt the same as 1px?

No. 1pt equals 1.333px in CSS, so 12pt and 16px are the same length. Both are absolute units on the same 96px inch, which is why the 0.75 factor never changes.

Why did my PDF come out smaller than the pt value?

Print scaling. A Fit to page setting, a scale below 100% or a PDF engine with shrinking switched on resizes the whole page after the CSS runs. Set the scale to 100%, then measure an element 72pt tall. It should print at 1 inch.

Do I need to convert line-height too?

Not when the value has no unit. A line-height of 1.5 multiplies the font size and survives the switch to pt. A rem line-height such as 1.75rem converts like any other length, and the stylesheet converter picks those up.