How to make the font size smaller when I resize the browser
Categories:
Dynamic Font Sizing: Making Text Adapt to Browser Resizes

Learn how to implement responsive font sizes that automatically adjust when a user resizes their browser window, ensuring optimal readability across various screen dimensions.
Ensuring your website remains readable and aesthetically pleasing across all device sizes and browser window dimensions is a cornerstone of modern web development. A common challenge is making text scale gracefully. When a user resizes their browser, fixed font sizes can lead to either cramped text or excessive white space. This article explores various CSS techniques to achieve dynamic font sizing, allowing your text to adapt fluidly to changes in the viewport.
Understanding Viewport Units for Font Sizing
Viewport units provide a powerful way to create responsive typography. These units are relative to the viewport's dimensions, meaning they change as the browser window is resized. There are four main viewport units:
vw
(viewport width): 1vw is equal to 1% of the viewport's width.vh
(viewport height): 1vh is equal to 1% of the viewport's height.vmin
(viewport minimum): 1vmin is equal to the smaller of 1vw or 1vh.vmax
(viewport maximum): 1vmax is equal to the larger of 1vw or 1vh.
Using vw
is particularly effective for font sizing, as text will scale horizontally with the browser window. However, relying solely on vw
can make text too small on very narrow screens or excessively large on very wide screens. A common best practice is to combine vw
with other units or use clamp()
for more control.
/* Basic usage of vw for font sizing */
h1 {
font-size: 5vw; /* Font size will be 5% of the viewport width */
}
p {
font-size: 1.5vw;
}
Simple example using vw
for responsive font sizes.
vw
is great for responsiveness, consider setting a min-font-size
or using clamp()
to prevent text from becoming unreadably small on mobile devices or excessively large on ultra-wide monitors.Combining Viewport Units with calc()
and clamp()
For more robust and controlled responsive typography, CSS functions like calc()
and clamp()
are invaluable. They allow you to define a more sophisticated scaling behavior.
Using calc()
for a Hybrid Approach
calc()
lets you combine different CSS units. You can mix a fixed unit (like px
or rem
) with a viewport unit (vw
) to create a font size that scales but also has a baseline. This prevents the font from becoming too small or too large.
Leveraging clamp()
for Ultimate Control
clamp()
is the most modern and recommended approach for responsive font sizing. It takes three values: a minimum value, a preferred value, and a maximum value. The browser will use the preferred value as long as it's between the minimum and maximum. If the preferred value goes below the minimum, the minimum is used. If it goes above the maximum, the maximum is used.
This function is perfect for defining a font size that scales with the viewport (vw
) but never drops below a certain rem
or px
size and never exceeds another rem
or px
size.
/* Using calc() to combine rem and vw */
h1 {
font-size: calc(2rem + 2vw); /* Base 2rem, scales up with 2% of viewport width */
}
/* Using clamp() for min, preferred, and max font sizes */
p {
font-size: clamp(1rem, 1.2vw + 0.5rem, 1.5rem);
/* Min: 1rem, Preferred: 1.2vw + 0.5rem, Max: 1.5rem */
/* This means the font will scale with the viewport, but stay between 1rem and 1.5rem */
}
Advanced responsive font sizing with calc()
and clamp()
.
flowchart TD A[Browser Resizes] --> B{Font Size Calculation} B -->|Using vw| C[Font scales directly with viewport width] B -->|Using calc()| D[Font scales with viewport, but has a base size] B -->|Using clamp()| E[Font scales within defined min/max limits] C --> F[Potential for too small/large text] D --> G[Better control, but still can exceed limits] E --> H[Optimal control, text stays readable]
Decision flow for choosing responsive font sizing methods.
Practical Implementation Steps
Here's a general approach to implementing dynamic font sizing using clamp()
for optimal results.
1. Define a Base Font Size
Start by setting a base font size on the <html>
element using rem
units. This provides a consistent foundation for all other font sizes.
2. Apply clamp()
to Headings and Paragraphs
For headings (h1
to h6
) and paragraphs (p
), use the clamp()
function. Experiment with the min
, preferred
, and max
values to achieve the desired scaling behavior. A good starting point for the preferred value is a combination of vw
and rem
.
3. Test Across Devices and Viewport Sizes
Thoroughly test your typography on various screen sizes, including mobile, tablet, and desktop, and by manually resizing your browser window. Adjust the clamp()
values as needed to ensure readability and aesthetic appeal.
4. Consider Line Height and Letter Spacing
As font sizes change, line height and letter spacing might also need adjustment to maintain readability. Use relative units like em
or unitless values for line height to ensure they scale proportionally.
rem
units are relative to the root html
element's font size, while em
units are relative to the font size of the parent element. This distinction is crucial when planning your typography scale.