Ready to calculate
Set your font size range and viewport widths, then click Calculate// calculate fluid type scales with css clamp()
Calculate min, preferred, and max font sizes for fluid typography. Generate clamp() CSS values for responsive, scale-perfect type systems instantly.
Ready to calculate
Set your font size range and viewport widths, then click CalculateEnter your minimum and maximum font sizes in rem or px. These are the sizes at the smallest and largest viewports.
Enter the viewport widths where the scaling begins and ends โ typically 320px (mobile) to 1280px (desktop).
Click Calculate to generate the CSS clamp() value. Use the live slider to preview how the font scales at any width.
CSS Fluid Typography uses the clamp() function to make font sizes scale linearly between a minimum and maximum based on viewport width โ no media queries needed. This calculator computes the precise slope and intercept values for the preferred middle value of clamp().
Fluid typography is a technique where font sizes scale smoothly based on the viewport width, instead of jumping between fixed sizes at specific breakpoints. It uses the CSS clamp() function to define a minimum size, a preferred fluid size, and a maximum size.
clamp(min, preferred, max) returns the preferred value as long as it's between min and max. The preferred value is a viewport-relative expression like 1.5vw + 0.5rem, which scales with the viewport. The result never goes below min or above max.
Rem is generally preferred for font sizes because it respects the user's browser font size preference. If the user has set their base font size to 20px, rem values scale accordingly. Pixel values are fixed and do not honor user preferences.
Common choices are 320pxโ375px for the minimum (small mobile) and 1200pxโ1440px for the maximum (desktop). The scaling will be clamped outside this range, so fonts remain fixed below and above these widths.
Yes โ clamp() has excellent browser support as of 2021, covering all modern browsers including Chrome, Firefox, Safari, and Edge. For legacy IE support, you'd need a fallback fixed font size before the clamp() declaration.
The slope is the rate of change in font size per viewport width unit (expressed as a vw percentage). The intercept is an offset in rem/px that ensures the size is exactly at min when the viewport is at its minimum width.
Absolutely. The same clamp() technique works for any CSS length property โ line-height, padding, margin, gap, or even border-radius. Just substitute your desired min/max values for those properties.
The vw component provides the viewport-proportional scaling, while the rem offset adjusts the intercept so the curve passes exactly through your specified min/max points at your specified viewport widths. Together they form a linear equation that precisely maps viewport width to font size.
A CSS fluid typography calculator helps you generate the correct clamp() CSS values for responsive font sizes that scale smoothly between any two viewport widths. Instead of writing multiple media queries to switch between font sizes at breakpoints, fluid typography lets a single CSS declaration handle the entire range โ from the smallest phone to the widest monitor.
This tool takes four inputs: your desired minimum font size, maximum font size, the viewport width where scaling starts, and the viewport width where it ends. It then calculates the mathematically precise clamp() value that interpolates linearly between your two size values across that viewport range.
๐ก Looking for premium CSS templates and UI kits? MonsterONE offers unlimited downloads of templates, UI kits, and assets โ worth checking out.
The clamp() function was introduced in CSS Values Level 4 and has become the cornerstone of modern fluid typography. Its syntax is straightforward:
font-size: clamp(minimum, preferred, maximum);
The minimum value is the smallest the font will ever become, no matter how narrow the viewport. The maximum is the largest it will ever grow. The preferred value is a fluid expression โ typically a combination of viewport width units (vw) and a fixed offset in rem โ that scales linearly with the viewport.
The preferred value in a clamp() expression is a linear equation of the form m * vw + b, where m is the slope and b is the y-intercept. To find these values:
For example, if you want a font to scale from 16px at 320px viewport to 24px at 1280px, the slope is (24 โ 16) / (1280 โ 320) = 8 / 960 โ 0.833%. The intercept is 16 โ 0.00833 ร 320 โ 13.33px, which is 0.833rem. The final result would be:
font-size: clamp(1rem, 0.833vw + 0.833rem, 1.5rem);
Traditional responsive typography involves writing media queries at several breakpoints:
h1 { font-size: 1.5rem; }
@media (min-width: 768px) { h1 { font-size: 2rem; } }
@media (min-width: 1200px) { h1 { font-size: 2.5rem; } }
This approach has several drawbacks. The jumps between sizes can feel abrupt. You have to maintain multiple declarations. Adding a new breakpoint means touching many files. And the sizing is only "right" at each exact breakpoint โ between them, the size may be too large or too small for the viewport.
Fluid typography solves all of this with a single declaration that's mathematically optimal at every viewport width.
For production use, rem-based fluid typography is strongly recommended. Rem units are relative to the root element's font size, which defaults to 16px in most browsers but can be changed by the user in their browser settings. If a user sets their default font size to 20px for accessibility reasons, rem values will scale proportionally โ respecting their preference. Pixel values, being absolute, will not.
This makes rem-based fluid typography not just convenient but also more accessible. This calculator outputs both rem and px versions so you can choose based on your project's requirements.
Most design systems define multiple type levels โ body text, captions, subheadings, headings, and display sizes. Fluid typography works beautifully for all of them. A common approach is to use a modular scale ratio (like 1.25 for Major Third or 1.333 for Perfect Fourth) applied at both the min and max sizes, then run each level through this calculator.
For example, with a 1.25 ratio and a base of 16px/24px (min/max body text):
clamp(1rem, ... , 1.5rem)clamp(1.25rem, ... , 1.875rem)clamp(1.563rem, ... , 2.344rem)clamp(1.953rem, ... , 2.93rem)clamp(2.441rem, ... , 3.662rem)Each level uses the same viewport range, keeping the scale harmonious across all breakpoints. You can use the quick presets in this tool to quickly generate common type levels.
A clean way to implement fluid typography across an entire project is to combine clamp() with CSS custom properties (CSS variables):
:root {
--text-sm: clamp(0.875rem, 0.5vw + 0.75rem, 1rem);
--text-base: clamp(1rem, 0.833vw + 0.833rem, 1.5rem);
--text-lg: clamp(1.25rem, 1.25vw + 1rem, 2rem);
--text-xl: clamp(1.5rem, 2vw + 1rem, 2.5rem);
--text-2xl: clamp(2rem, 3vw + 1rem, 4rem);
}
body { font-size: var(--text-base); }
h1 { font-size: var(--text-2xl); }
h2 { font-size: var(--text-xl); }
h3 { font-size: var(--text-lg); }
.caption { font-size: var(--text-sm); }
This keeps your type scale centralized and easy to adjust. Change a single variable and every instance of that type size updates across your entire project.
clamp() is supported in all modern browsers since 2021, including Chrome 79+, Firefox 75+, Safari 13.1+, and Edge 79+. For projects requiring IE 11 support, you can provide a simple fixed fallback:
/* IE fallback */
font-size: 1.25rem;
/* Modern browsers */
font-size: clamp(1rem, 0.833vw + 0.833rem, 1.5rem);
Since IE ignores the second declaration, this gives a reasonable fixed size to old browsers while modern browsers get the fluid version.