New

May 13, 2025

font size
typography

Don't Let REM Font Sizes in Framer Ruin Your Design

Framer recently introduced support for rem units in font sizing, giving designers more flexibility and control. But if not used carefully, rem can cause unexpected layout issues — especially when users change their browser's default font size. This article breaks down how rem works in Framer, where things can go wrong, and how to design with it safely.

David McBacon

Created by

David McBacon
Don't Let REM Font Sizes in Framer Ruin Your Design

Framer recently introduced rem units for font size. It's a great addition to the toolset and something the community has been asking for for a while. But rem can really be a destroyer of your designs and layouts if you're not careful. Before diving into how it can mess things up, we need to fully understand what rem is, how it behaves, and how it plays with Framer.

What is the rem unit?

In CSS, rem stands for “root em” — a unit of measurement that represents the font size of the root element. This means that 1remequals the font size of the <html> element, which, in most browsers, has a default value of 16px. Doing some pretty basic math, here's what we get:

  • 12px = 0.75rem
  • 16px = 1rem (base)
  • 20px = 1.25rem
  • 24px = 1.5rem
  • 32px = 2rem
  • 48px = 3rem
  • 64px = 4rem
  • 80px = 5rem

Where is this default stored or defined?

Browsers use user agent stylesheets, which are internal styles applied before any of your own CSS. These styles include:

  • default font-size on <html> and other elements
  • default margin on <body>
  • styles for built-in elements like <input>, <button>, etc.
  • and many more

You can see these in the browser dev tools:

  1. Open Developer Tools (right-click > Inspect)
  2. In the Elements tab, select the <html> element
  3. Go to the “Computed” sub-tab and check the “Show all” checkbox
  4. Find the font-size property

Where is this injected?

The base pixel value of 1rem is applied at the <html> element level. The browser initializes rendering based on this value. So when you userem, your entire typography and spacing scale can shift depending on the user's browser settings. And that's where things can get unpredictable (and even ugly) because users can change their browser settings, especially font size.

Browser font size settings

So how can a user change the default font size — the actual pixel value of 1rem?

In Chrome, go to Settings > Appearance > Font size. The default is “Medium” (1rem = 16px). But there are two options below Medium and two above it. Let's say we're visually impaired and set the font size to “Very Large” (1rem = 24px). What happens to our typography in the design?

Well, if we use rem units, everything will scale, and possibly break if we didn't design with scaling in mind.

But wait, what if our designs use px for font size? In that case, the font won't scale. Our design is safe, yay. But the visually impaired user? Not so happy, because they can't read the text properly.

Now let's add Framer to the mix.

Font size rem units in Framer

In Framer, you can set the base pixel value of 1rem in the Layout Template under Typography. Then, you can use rem units in text layers instead of px. But let's walk through all the possible scenarios.

Rem in Framer

1. No layout template and rem in text layers

If you're not using Layout Templates (which you should, by the way), the rem value comes directly from the browser's settings.

  • Browser settings: 1rem = 24px (Very Large)
  • Framer settings: none
  • Text layer with 1rem font size renders as 24px
  • Text layer with 5rem font size renders as 120px
Rem in Framer Default

2. With layout template and rem in text layers

If you use a Layout Template and set the Base Typography to 15px, therem value is injected by Framer and overrides the browser setting.

  • Browser settings: 1rem = 24px (Very Large)
  • Framer settings: 1rem = 15px
  • Text layer with 1rem font size renders as 15px
  • Text layer with 5rem font size renders as 75px
Rem in Framer 15

3.1 With layout template and rem in text layers (default setting: 16px)

Now things get weird. If you add a layout template but don't touch the Base Typography value (leave it at 16px), then the rem value still comes from the browser — Framer's setting is ignored.

  • Browser settings: 1rem = 24px (Very Large)
  • Framer settings: 1rem = 16px (Ignored)
  • Text layer with 1rem font size renders as 24px
  • Text layer with 5rem font size renders as 120px
Rem in Framer Default

3.2 With layout template and rem in text layers (resetting to 16px)

On the other hand, if you add a layout template, click the plus button to change the Base Typography to 17px, then click minus to bring it back to 16px — now the rem value comes from Framer and overrides the browser.

  • Browser settings: 1rem = 24px (Very Large)
  • Framer settings: 1rem = 16px
  • Text layer with 1rem font size renders as 16px
  • Text layer with 5rem font size renders as 80px

In both 3.1 and 3.2 we have 16px set in Framer, but the result is totally different. The only difference is that in 3.2, we interacted with the control. My spidey senses tell me that changing the value triggers Framer to override the browser default.

Rem in Framer 16

How can rem destroy design and layouts?

In scenarios 1 and 3.1, you're not in control of the final rendered font size — the user is. And if they've set their browser to “Very Large” (1rem = 24px), your text might break out of containers or get clipped if you're using overflow: hidden on the parent frame. In my screenshots, I set a fixed width on the orange-bordered parent frame to demonstrate this breakout.

Final thoughts

rem units were originally invented for accessibility — users couldn't zoom text sized with pixels. Framer's decision to override browser defaults (in scenarios 2 and 3.2) kind of goes against that original idea. But on the other hand, it helps keep your designs consistent.

If you're in scenario 1 or 3.1, your website is properly accessible, but you need to be really mindful of your design decisions. You have to account for the fact that the actual text size might be much larger for users with Large or Very Large font settings in their browser.

Sign up for the newsletter_

Get notifications about the latest Framer components or templates from BACHOFF Studio directly to your inbox.