CSS font-stretch Property

Beginner
⏱️ 6 min read
📚 Updated: Jun 2026
🎯 4 Examples
Typography

What You’ll Learn

The font-stretch property selects a condensed, normal, or expanded width from a font so you can fine-tune how wide text appears horizontally.

01

normal

Default width.

02

condensed

Narrower text.

03

expanded

Wider text.

04

Keywords

9 stretch levels.

05

Variable fonts

Width axis.

06

Layout fit

Space control.

Introduction

The font-stretch property in CSS allows you to select a normal, condensed, or expanded face from a font. It enables finer control over the font appearance by stretching or compressing the text horizontally.

This property is particularly useful when you want to achieve a specific look or ensure text fits within a designated space without changing its font size.

Definition and Usage

Unlike changing font-size, font-stretch adjusts character width. The browser picks the closest available width variant in the font family. Variable fonts can interpolate smoothly between condensed and expanded widths.

💡
Beginner Tip

If nothing changes when you set font-stretch, the font probably only has one width. Try a variable font or a family that includes Condensed and Expanded styles.

📝 Syntax

The syntax for the font-stretch property is straightforward. You can specify keyword values to achieve the desired effect:

syntax.css
element {
  font-stretch: value;
}

Basic Example

font-stretch-basic.css
.headline {
  font-stretch: condensed;
}
font-stretch: condensed; font-stretch: normal; font-stretch: expanded; font-stretch: 75%;

Default Value

The default value of the font-stretch property is normal, which indicates no stretching or condensing of the font.

Syntax Rules

  • Accepts keyword values from ultra-condensed through ultra-expanded.
  • Also accepts percentage values (typically 50% to 200%) in modern browsers.
  • The property is not inherited by default.
  • Only has a visible effect when the font provides matching width variants.
  • Works with the font shorthand when included in the declaration.

⚡ Quick Reference

QuestionAnswer
Initial valuenormal
Applies toAll elements
InheritedNo
Direction of effectHorizontal (width)
RequiresFont with width variants

💎 Property Values

The font-stretch property accepts the following keyword values:

ValueDescription
ultra-condensedThe most condensed text possible
extra-condensedExtra condensed text
condensedCondensed text
semi-condensedSlightly condensed text
normalNo stretching or condensing
semi-expandedSlightly expanded text
expandedExpanded text
extra-expandedExtra expanded text
ultra-expandedThe most expanded text possible

Percentage values

Percentages map to width on a scale where 100% equals normal. Values below 100% condense; values above 100% expand. Example: font-stretch: 75%;

👀 Live Preview

Three stretch levels on the same sentence (effect depends on available font widths):

font-stretch: condensed; Typography width demonstration text.
font-stretch: normal; Typography width demonstration text.
font-stretch: expanded; Typography width demonstration text.

Examples Gallery

Apply different font-stretch values from ultra-condensed to ultra-expanded, then explore simpler comparisons, narrow layouts, and percentage widths.

🔢 Keyword Values

Start with the reference example — five stretch levels from ultra-condensed to ultra-expanded.

Example 1 — Five Stretch Levels

Demonstrate ultra-condensed, condensed, normal, expanded, and ultra-expanded on separate paragraphs.

font-stretch-keywords.css
.ultra-condensed { font-stretch: ultra-condensed; }
.condensed { font-stretch: condensed; }
.normal { font-stretch: normal; }
.expanded { font-stretch: expanded; }
.ultra-expanded { font-stretch: ultra-expanded; }
Try It Yourself

How It Works

Each class requests a different width variant. The browser uses the closest match available in the active font family.

Example 2 — Condensed vs Normal vs Expanded

A simpler three-way comparison for quick visual checking.

font-stretch-compare.css
.narrow { font-stretch: condensed; }
.regular { font-stretch: normal; }
.wide { font-stretch: expanded; }
Try It Yourself

How It Works

Condensed text takes less horizontal space; expanded text spreads wider at the same font size.

📈 Practical Use Cases

Use stretch to fit labels in tight layouts or fine-tune headline width.

Example 3 — Condensed Label in a Narrow Column

Fit a long label into a sidebar without shrinking font-size.

font-stretch-narrow.css
.sidebar-label {
  font-size: 0.875rem;
  font-stretch: semi-condensed;
  max-width: 8rem;
}
Try It Yourself

How It Works

Semi-condensed width helps long words fit narrow UI areas while keeping text readable.

Example 4 — Percentage Width Values

Use percentages for finer control on variable fonts that support the width axis.

font-stretch-percent.css
.width-75 { font-stretch: 75%; }
.width-100 { font-stretch: 100%; }
.width-125 { font-stretch: 125%; }
Try It Yourself

How It Works

100% equals normal width. Lower percentages condense; higher percentages expand when the font supports continuous width adjustment.

♿ Accessibility

  • Do not over-condense body text — very narrow widths can hurt readability for long paragraphs.
  • Prefer real font variants over transform: scaleX(), which distorts letterforms and can confuse screen magnifiers.
  • Keep sufficient contrast and size — font-stretch changes width, not height; still set a readable font-size.
  • Test with your actual web font to confirm condensed styles remain legible at small sizes.
  • Avoid relying on stretch alone to fix overflow; consider wrapping, truncation, or layout changes too.

🧠 How font-stretch Works

1

You request a width

Set a keyword like condensed or a percentage like 75%.

Declaration
2

Browser checks the font

It looks for matching condensed, normal, or expanded faces in the font family or variable font axis.

Font matching
3

Closest width is used

If an exact match is unavailable, the browser picks the nearest supported width variant.

Selection
=

Horizontally tuned text

Characters render wider or narrower without changing font-size.

🖥 Browser Compatibility

The font-stretch property is supported in most modern browsers, including recent versions of Chrome, Firefox, Safari, Edge, and Opera. Variable font support has improved how smoothly width values interpolate.

Baseline · Modern browsers

font-stretch in current engines

Keyword values are widely supported; percentage syntax works in current Chromium, Firefox, and Safari releases.

94% Modern browser support
Google Chrome 60+ · Desktop & Mobile
Supported
Mozilla Firefox 9+ · Desktop & Mobile
Supported
Apple Safari 11+ · macOS & iOS
Supported
Microsoft Edge 79+ (Chromium)
Supported
Opera 47+
Supported
font-stretch property 94% supported

Bottom line: Safe for modern projects. Visual results still depend on whether your chosen font includes width variants.

🎉 Conclusion

The font-stretch property is a powerful tool for web developers aiming to fine-tune the appearance of text on their websites. By adjusting the horizontal stretching of text, you can achieve a specific design aesthetic and ensure optimal text fit within your layout.

Experiment with different values to see how this property can enhance your typography and overall design. Pair it with fonts that offer condensed and expanded styles for the best results.

💡 Best Practices

✅ Do

  • Use fonts with multiple width variants
  • Try condensed widths for labels and nav items
  • Test with your actual web font loaded
  • Combine with font-weight for emphasis
  • Use percentages on variable fonts for fine control

❌ Don’t

  • Expect changes from single-width fonts
  • Over-condense long reading paragraphs
  • Use scaleX() when a real width exists
  • Rely on stretch instead of fixing layout
  • Forget to check fallback font behavior

Key Takeaways

Knowledge Unlocked

Five things to remember about font-stretch

Use these points when tuning horizontal text width.

5
Core concepts
normal 02

Default normal

No stretch.

Default
9 03

9 keywords

Condensed to expanded.

Syntax
VF 04

Variable fonts

Width axis.

Modern CSS
📈 05

Layout fit

Tight spaces.

Use case

❓ Frequently Asked Questions

font-stretch selects a condensed, normal, or expanded width variant from a font family. It changes how wide characters appear horizontally without changing font-size.
The default value is normal, which means no extra condensing or expanding is applied.
The active font must include multiple width variants, such as a variable font or a family with Condensed and Expanded faces. If only one width exists, the browser cannot stretch the font and the value has little or no visible effect.
font-stretch uses real font outlines designed for each width, so letterforms stay balanced. scaleX() mechanically squashes or stretches the rendered text and can distort shapes.
Yes in modern CSS. Percentages like 75% or 125% map to width between condensed and expanded. Keyword values such as condensed and expanded are still the most common beginner-friendly syntax.

Practice in the Live Editor

Open the HTML editor, try condensed and expanded font-stretch values, and see how text width changes with your font.

HTML Editor →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful