48px to rem

3rem

48px is 3rem at the browser’s default 16px root: 48 ÷ 16 = 3. Under a 16px parent it’s 3em; it’s also 36pt (CSS fixes 1pt at 4/3 px) and 300% as a font-size percentage.

At other root sizes

root 16px (default)    48px = 3rem
root 10px (62.5%)      48px = 4.8rem
root 18px (112.5%)     48px = 2.6667rem

At 18px the rounded 2.6667rem is 48.0006px; calc(48rem / 18) is exact.

48px as a box, not a font

48px is as common for boxes as for type. Material Design recommends touch targets of at least 48 by 48 dp; WCAG 2.2 asks for 24 by 24 CSS pixels at level AA (2.5.8) and 44 by 44 at AAA (2.5.5). A button with min-height: 3rem grows with its label when a reader raises the default font size; a fixed height: 48px can clip the enlarged text.

Why rem and not px

At a 20px browser default, 3rem is 60px while 48px stays 48px. Zoom scales both, so only rem follows the reader’s setting.

In Tailwind, Sass and CSS

Tailwind CSS v4’s text-5xl is 3rem and sets line-height: 1, so the line box is 48px too; smaller steps get looser ratios, like text-base at 1.5. On the spacing scale (--spacing: 0.25rem), p-12 is 3rem, and size-12 makes a 48px square.

@use 'sass:math';
font-size: math.div(48px, 16px) * 1rem; // 3rem
font-size: calc(48rem / 16); /* 3rem */

Try it in the PX to REM Converter

Up to 500 values, separated by spaces or commas.

Valuepxremempt%Copy
48px483336300

Common sizes at root 16px

pxrempt%
80.5650
100.6257.562.5
120.75975
140.87510.587.5
16112100
181.12513.5112.5
201.2515125
241.518150
301.87522.5187.5
362.2527225
48336300
603.7545375
724.554450

Runs in your browser. Nothing you enter is sent anywhere.