This is an H1 Title. There can ONLY be one of these on each page!

This page will walk you through the main accessibility tags used in web design—like headings h1… h6 and paragraphs etc. You'll also learn the basics of text properties in Framer, so your pages are clear, readable, and follow best practices.

placeholder image of surfbreak
placeholder image of surfbreak

Important lesson! Search engines give extra weight to the first 100 words on any webpage. Use this space to clearly explain your content and include the keywords you want to rank for. This helps Google understand your page and improves your chances of appearing in search results.

Logo

Logo

Logo

Logo

placeholder image of someone surfing
placeholder image of someone surfing
placeholder image of someone surfing

Section Eyebrow

This is an H2. Each section should start with an H2.

I'm a section intro. I'm written in standard body text. At a high level, 100–300 words per section is optimal for engagement.

New Section Eyebrow

H2: Intro to Heading Structures

I'm another section intro. Also written in standard body paragraph (p) text, as standard. Notice how this text is spread out across the page? Means the reader has to literally move their neck to read it. This is bad for the User experience.

Generally speaking, it's better to limit the size of a text element to a narrower paragraph width for readability. Personally, I like to give my paragraphs a max width of 600px-800px depending on the text size (see image below)

Framer tutorial | Giving a text box a max-width

I'm an H3. You'll find one or more of me me nested under H2s

Keep paragraphs short, but maybe not this short. You'll want to target 2–4 lines max for each one.

H3: Important lesson on heading tag hierarchy and ordering

Make sure you only ever use headings in ORDER! Proper heading hierarchy helps search engines and screen readers understand the content structure. Don’t skip levels (e.g. going from H1 to H4). It’s good for SEO and accessibility.

Placeholder image of people surfing
Placeholder image of people surfing

H4: Make sure that the order only ever looks something like this:

H1

-> H2

——> H3

——> H3

——> H3

————-> H4

—————--> H5

—————--> H5

————-> H4

-> H2

——> H3

H1

-> H2

——> H3

——> H3

——> H3

————-> H4

—————--> H5

—————--> H5

————-> H4

-> H2

——> H3

H4: Never nest an H4 immediately under an H2 without an H3 in-between.

That is to say, don't do this:

H1

——> H3

-> H2

————-> H4

——> H3

—————--> H5

————-> H4

—————--> H6

That is to say, don't do this:

H1

——> H3

-> H2

————-> H4

——> H3

—————--> H5

————-> H4

—————--> H6

I'm an H3 and there's quite a bit of content nested under me! When/how should you break the content up?

Long sections without breaks feel overwhelming and are harder to scan, especially on mobile.

In instances like this, you probably want to use headings every 100–150 words to break up content.

The general rule When you'd want to break up a section is:

Long sections without breaks feel overwhelming and are harder to scan, especially on mobile.

In instances like this, you probably want to use headings every 100–150 words to break up content.

The general rule When you'd want to break up a section is:

H4: When you’re introducing multiple ideas or benefits

Break it up so each idea gets its own space. This makes it easier to follow and scan.

Break it up so each idea gets its own space. This makes it easier to follow and scan.

H4: When the text exceeds ~500–600 words

If a section runs long, split it with subheadings or dividers to keep things readable.

If a section runs long, split it with subheadings or dividers to keep things readable.

H4: When it’s hard to understand the section at a glance

Add structure with headings or formatting so users can skim and still get the point.

Add structure with headings or formatting so users can skim and still get the point.

H4: When there's no clear visual hierarchy (e.g. no subheadings or dividers)

Sections need visual anchors—use layout, size, or style shifts to guide the eye.

Sections need visual anchors—use layout, size, or style shifts to guide the eye.

H4: Some Common things you can do to break up content

H5: Use subheadings

Even short paragraphs benefit from a clear headline to frame the idea.

Even short paragraphs benefit from a clear headline to frame the idea.

H5: Use bullet point lists

Lists help chunk complex content into quick, readable bites.

Lists help chunk complex content into quick, readable bites.

H5: Use images

A well-placed image adds breathing room and reinforces your message visually.

A well-placed image adds breathing room and reinforces your message visually.

placeholder image of save crashing
placeholder image of save crashing
Microsoft Word | Use of Semantic tags (H1s, H2s, H3s etc)
Microsoft Word | Use of Semantic tags (H1s, H2s, H3s etc)

H3: This hierarchy and structure is a universal standard!

Headings follow a universal structure used not just in web design. Tools like Microsoft Word and Google Docs also rely on you using Headings to streamline document navigation, build outlines and insert tables of contents.

If you use proper heading tags when drafting, you can copy and paste directly into most website builders, and your content will automatically adapt to the the predefined formatting and styles.

Eyebrow

Here's another H2 for you, because this is a brand new section.

Just reinforcing that you shouldn't ever have two H2s in a given section!

Placeholder image of someone surfing

This is an H3.

The quick brown fox jumped over the lazy dog.

placeholder image of surfer

This is also an H3.

Another quick brown fox jumped over the same lazy dog.

placeholder image of surfer

Yep, another h3 here.

The same quick brown fox jumped over a different lazy dog.

Eyebrow

H2: How to control/update the tag of any text item manually in Framer.

Sometimes, you’ll want a piece of text—like an eyebrow label or a visually customised heading—to look different from your standard styles, but still be recognised by Google as a proper heading.

In these cases, you can set the visual style manually, while still assigning it a semantic heading tag (like h2 or h3) in the Accessibility panel.

Framer Tutorial | How to manually configure accessibility tag (h1, H2, H3, H4, H5, H6, p, span)

H3: Different Tags and their use cases

  • h1: The main page title – use only once per page
  • h2: Section headings – each major section should start with an H2
  • h3–h6: Subheadings under H2s (use to break down content hierarchically)
  • p: Standard paragraph text - use this for body text
  • span: Inline text with no semantic meaning – use only when you don’t want the text to act like a heading or paragraph. This is very useful for eyebrow text and breadcrumbs!
Eyebrow

H2: A typical Web Page will use TWO Typefaces (aka fonts).

Fonts play a big role in how your website feels and how easy it is to read. Most websites use two fonts:

  • One for headings (to catch attention)

  • One for body text (to keep things clear and readable)

Your font choices are a big part of your brand, just like your colors and logo.

Image highlighting the difference between serif fonts and sans-serif fonts

H3: Intro to fontpairings

H4: General Guidelines for Headings

Headings are where you can add a bit of personality. You might choose a bold or stylised font here to make a strong first impression.

H4: General Guidelines for body paragraphs

For body text, it’s best to stick with a sans-serif font (like Inter, Roboto, or Helvetica).
Sans-serif fonts are cleaner and easier to read—especially on screens and at smaller sizes.

H4: Where to look for font-pairing inspiration

If you're looking for inspiration on which fontpairs you should consider, check out the font pairings on offer at Fontpair!

H3: You can also install Custom Fonts if you like

You’re not limited to the default fonts in Framer. If you have a specific font in mind, you can upload it directly to your project.

H4: Places to find custom fonts

Here are some popular places to find fonts (both free and paid):

  • Google Fonts – free and easy to use. You can actually access these natively inside Framer. No custom installation required.

  • Adobe Fonts – included with Creative Cloud

  • DaFont – lots of casual and display fonts

  • MyFonts – huge library of professional fonts

  • Fonts.com – industry-standard fonts

  • Grilli Type – clean, modern fonts

  • Envato Elements – included with a subscription

Here are some popular places to find fonts (both free and paid):

  • Google Fonts – free and easy to use. You can actually access these natively inside Framer. No custom installation required.

  • Adobe Fonts – included with Creative Cloud

  • DaFont – lots of casual and display fonts

  • MyFonts – huge library of professional fonts

  • Fonts.com – industry-standard fonts

  • Grilli Type – clean, modern fonts

  • Envato Elements – included with a subscription

H4: How to upload a custom font in Framer

See the image below this section for a visual overview. Otherwise, go to your Fonts panel

  • Switch to the Custom tab

  • Upload your font file (usually .ttf or .woff)

  • Select it from the dropdown and you’re good to go!

See the image below this section for a visual overview. Otherwise, go to your Fonts panel

  • Switch to the Custom tab

  • Upload your font file (usually .ttf or .woff)

  • Select it from the dropdown and you’re good to go!

H4: Warning - Check the license when you download a font!

When you download a font, it usually comes with a license that tells you how you can use it.

For example, some fonts are free for personal use, but require a paid license for commercial work like logos or websites. Always check before using it in your project.

When you download a font, it usually comes with a license that tells you how you can use it.

For example, some fonts are free for personal use, but require a paid license for commercial work like logos or websites. Always check before using it in your project.

Logos for a variety of popular font foundries and typeface libraries
Logos for a variety of popular font foundries and typeface libraries
Framer Tutorial | Infographic for how to import a custom font
Eyebrow

H2. General Text Styling

In this guide, I will not take you through all of the standard text formatting options. I'm assuming you're familiar with font weights, italicism, paragraph alignment from using Microsoft Word.

However, I will be taking you through some of the options more specifically important to WEB DESIGN.

You can stylise text as much Or as little as you like!

You can stylise text as much Or as little as you like!

Framer Tutorial | How to add custom text properties to a text box

H3: Play around with the advanced text settings!

Headings follow a universal structure—used not just in web design, but in tools like Microsoft Word and Google Docs to build outlines and tables of contents.

If you use proper heading tags when drafting, you can copy and paste directly into most website builders, and your content will automatically adapt to the the predefined formatting and styles.


H4: Common use cases

Shadows – Adds a shadow behind your text; useful for contrast or depth.

  • Stroke – Outlines your text with a colored border; can be used for bold or outlined text effects.

  • Paragraph – Controls paragraph-level settings like alignment, indentation, and spacing.

  • Transform – Changes the case of your text (e.g. uppercase, lowercase, capitalize).

  • Decoration – Adds styling like underline, line-through (strikethrough), or overline.

  • Balance – Adjusts line breaking for headings to make text look more visually even and balanced.

Eyebrow

H2. Text Box Sizing

If you grab any text box on the page, you'll notice there are three 'Grow' shortcuts underneath. Here's what you need to know about them.

To explore what each of them do, grab the H3 text titles on each of the cards, and scale them bigger or smaller. You can do this by selecting the text box, and either dragging the box, or by adding more/less pixels to the text box size in the width/height settings.

Framer Tutorial | How to set text box grow property to Grow (horizontally)

My text box = 'Grow' (Horizontal)

This sets the width and height to fit content.


Key behaviours

  1. As you type, the text box itself will extend to accomodate the extra letters, keeping everything on a single line.

  2. If you manually resize the box, the text size scales with it.


Best for:
Single-line text (e.g. buttons, badges, titles)

Framer Tutorial | How to set text box grow property to Auto Height

My text box = Auto Height. I will grow vertically the more that's typed into me.

This is probably the most frequently used setting!


This sets the width of the text box to fill the space of the parent container, and the height to fit content.


Key Behaviours

  • Text wraps onto new lines and the box gets taller as needed

  • Width stays fixed, keeping layout stable


Best for:
Paragraphs, blog excerpts, or any text that may grow over time

Framer Tutorial | How to set text box grow property to Fixed size

My text box = fixed size. My box size won't change no matter what.

Both width and height are locked. The text doesn’t grow the box—it just wraps or overflows within the set size.


Key Behaviours

  • Overflow text subject to 'overflow' rules

  • You can manually style the size without auto adjustments


Best for:
Cards or labels where space is tightly controlled

Eyebrow

H2. Text Sizing Options

The first thing to know about font size is that it’s measured in pixels. So if your font size is set to 24, that means each line of text is 24 pixels tall by default.

Framer Tutorial | Setting text to standard pixel sizing

The the text under me is set to size 24 Pixels

The quick brown fox jumped over the lazy dog.

Framer Tutorial | Setting text size to 'FIT'

The the text immediately under me is set to size: Fit

The quick brown fox jumped over the lazy dog.

^^^ as you can see above, Framer automatically scales the font size so the text fills the available space inside the parent container.


It’s a responsive behaviour that adjusts the font size based on the width and height of the box. It aims to create fluid typography.


Please just note that when you choose this option, you LOSE the ability to use the GROW shortcuts described in the section above, because the text size is now determined based on a 1-100% range of the parent container

^^^ as you can see above, Framer automatically scales the font size so the text fills the available space inside the parent container.


It’s a responsive behaviour that adjusts the font size based on the width and height of the box. It aims to create fluid typography.


Please just note that when you choose this option, you LOSE the ability to use the GROW shortcuts described in the section above, because the text size is now determined based on a 1-100% range of the parent container

^^^ as you can see above, Framer automatically scales the font size so the text fills the available space inside the parent container.


It’s a responsive behaviour that adjusts the font size based on the width and height of the box. It aims to create fluid typography.


Please just note that when you choose this option, you LOSE the ability to use the GROW shortcuts described in the section above, because the text size is now determined based on a 1-100% range of the parent container

Eyebrow

H2. Text 'Line' Options (Vertical Spacing)

As covered above, font size equates to font HEIGHT in PIXELS.

Line height (also called line spacing) controls how much vertical space appears between those lines. It affects how readable, airy, or dense your text feels.

In Framer, you can set line height using percent (%), EM, or pixels (px)—each works a little differently and is better suited to different types of layouts.

H3. Percentage '%' Settings

This is probably the most useful and intuitive setting for beginners. ✅✅✅

If your font size is 24px and you set the line height to 150%, each line will sit in a 36px-high row—that’s 24px of text plus 12px of spacing.

Because it’s based on a percentage of the font size, it automatically adjusts when the font size changes, making it great for responsive layouts.

Framer Tutorial | Setting text line spacing (vertical) to a percentage (100% shown)

The text underneath has text line set to 100%

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Framer Tutorial | Setting text line spacing (vertical) to a percentage (150% shown)

The text underneath has text line set to 150%

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

H3. EM Settings

This option works almost the same as percentages and is often preferred by developers working with inherited styles in more complex layouts—but it’s just as valid for beginners. ✅✅✅

EM units also scale the line height based on the font size:

  • 1EM = 100%, so a 24px font with 1.5EM line height gives you 36px between lines.

  • If your font is 36px, 1EM is 36px, and 1.5EM is 54px.

It’s flexible, semantic, and behaves the same way as % in most simple use cases.

Framer Tutorial | Setting text line spacing (vertical) to EM Sizing (1EM shown)

The text underneath has text line set to 1EM

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Framer Tutorial | Setting text line spacing (vertical) to EM Sizing (1.5EM shown)

The text underneath has text line set to 1.5EM

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

H3. 'Pixel' Settings

This setting is not recommended for most situations. ❌❌❌

When you set line height in pixels, it becomes fixed. So, if your font size changes, the spacing won’t update. This means every time you adjust your text size, you’ll need to manually recalculate and change the line height to keep things looking right.

This can easily lead to inconsistent spacing, especially in responsive designs. Use it only when you need very precise control over layout height and don't expect the text size to change.

Framer Tutorial | Setting text line spacing (vertical) to a pixel-value (24px shown)

The text underneath has text line set to 24px

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Framer Tutorial | Setting text line spacing (vertical) to a pixel-value (36px shown)

The text underneath has text line set to 36px

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Eyebrow

H2. Text 'Letter' Options (Horizontal Spacing)

Letter spacing (also called lettering or tracking) controls the space between characters in a text block. It can make your text feel tighter, or more spacious, or more stylised—depending on your goal.

You can set letter spacing using pixels (px) or EM, depending on how precise or scalable you want the effect to be.

H3. 'EM' Settings

EM letter spacing adds proportionate space between each character, based on the font size. ✅✅✅
So, if you change your font size, the horizontal spacing between letters will scales up or down automatically without you needing to do any extra calculations.

For example:

  • 1EM adds space equal to the full width of one character

  • 1.5EM adds 1.5x that amount between each letter

  • So if your font size is 24px, then

    • 1EM gives you 24px of space between letters,

    • and 1.5EM gives you 36px.

This makes EM great for responsive typography, because spacing stays balanced even when font sizes adjust across breakpoints or devices.

Framer Tutorial | Setting text lettering spacing (horizontal) to an EM-value (0EM shown)

The text underneath has text lettering set to 0EM. So, NO PIXELS between characters.

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Framer Tutorial | Setting text lettering spacing (horizontal) to an EM value (1EM shown)

The text underneath has text lettering set to 1 EM. Hence, 24x1=24px between characters.

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

H3. Pixel Settings

This is not generally recommended.❌❌❌

Letter spacing in pixels adds or removes a fixed number of pixels between each character.

  • A negative value (like -2px) pulls characters closer together

  • A positive value (like 4px) pushes characters further apart

This method gives you exact control, but doesn’t scale with font size—so it’s best used when your text and layout sizes are fixed.

Framer Tutorial | Setting text lettering spacing (horizontal) to a pixel-value (-2px shown)

The text underneath has text lettering set to -2 pixels

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Framer Tutorial | Setting text lettering spacing (horizontal) to a pixel-value (-4px shown)

The text underneath has text lettering set to 4 pixels

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

Eyebrow

H2. Paragraph Settings

The first thing to know about font size is that it’s measured in pixels. So if your font size is set to 24, that means each line of text is 24 pixels tall by default.

Framer Tutorial | Setting text paragraph spacing to a pixel-value (0px shown)

The the text under me is set to size 0 Pixels

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

The sun hung low in the sky, casting long shadows across the field.
Birds chirped in the distance, and a breeze rustled the leaves—just another quiet afternoon in the countryside.

Framer Tutorial | Setting text paragraph spacing to a pixel-value (48px shown)

The the text under me is set to size 48 Pixels

The quick brown fox jumped over the lazy dog. It paused for a moment, tail twitching, then darted off into the tall grass. Behind it, the dog let out a sigh and rolled onto its side, unbothered.

The sun hung low in the sky, casting long shadows across the field.
Birds chirped in the distance, and a breeze rustled the leaves—just another quiet afternoon in the countryside.

Ready to level up your digital strategy?

Unlock growth with solutions designed for modern businesses - from Shopify eCommerce to performance-driven web design.

Ready to level up your digital strategy?

Unlock growth with solutions designed for modern businesses - from Shopify eCommerce to performance-driven web design.

Ready to level up your digital strategy?

Unlock growth with solutions designed for modern businesses - from Shopify eCommerce to performance-driven web design.