CSS hyphenate-limit-chars: Prevent Awkward Hyphenation
The CSS hyphenate-limit-chars property provides
fine-grained control over how text breaks across lines by defining
character count thresholds for hyphenation. When using automatic
hyphenation, web browsers often break short words or leave tiny
fragments of words dangling at line boundaries, creating visually
jarring and hard-to-read text. This guide explains how
hyphenate-limit-chars works, its syntax, and how it
eliminates awkward word breaks to improve readability and typography on
the web.
The Problem with Default Automatic Hyphenation
Enabling automatic hyphenation with hyphens: auto allows
browsers to break words across lines based on language-specific
dictionaries. While this technique prevents large gaps in justified text
and controls uneven line lengths, default browser behavior can lead to
undesirable results.
Without limits, browsers may hyphenate short words (breaking a five-letter word into two- and three-letter fragments) or leave as few as one or two letters before or after a break. These tiny text fragments—such as leaving "a-" on one line and "bout" on the next—distract readers and degrade layout aesthetics.
What is
hyphenate-limit-chars?
The hyphenate-limit-chars property specifies the minimum
character counts required for a word to be hyphenated. It allows
developers to specify constraints across three distinct dimensions:
- Total word length: The minimum length a word must be before it is eligible for hyphenation.
- Pre-break characters: The minimum number of characters that must remain on the line before the hyphen.
- Post-break characters: The minimum number of characters that must be carried over to the following line after the hyphen.
Syntax and Values
The property accepts up to three space-separated integer values, or
the keyword auto:
/* Single value: sets minimum word length */
hyphenate-limit-chars: 6;
/* Two values: minimum word length, and minimum chars before & after */
hyphenate-limit-chars: 6 3;
/* Three values: word length, minimum before, minimum after */
hyphenate-limit-chars: 8 3 4;
/* Using auto to fall back to browser defaults */
hyphenate-limit-chars: 7 auto 3;When fewer than three values are provided, the values cascade according to CSS specification rules:
- One value: Sets the minimum word length. The
characters before and after default to
auto(often resolved as 2 by most user agents). - Two values: The first value sets the minimum total word length, and the second sets both the minimum before and after character limits.
- Three values: The first sets total length, the second sets characters before the hyphen, and the third sets characters after the hyphen.
Preventing Awkward Short-Word Hyphenation
To illustrate how hyphenate-limit-chars solves
typographical issues, consider the word "policy":
p {
hyphens: auto;
hyphenate-limit-chars: 8 3 3;
}With hyphenate-limit-chars: 8 3 3, the browser will not
hyphenate "policy" because it contains only six letters, falling below
the eight-character threshold.
For longer words like "internationalization", the browser evaluates the secondary rules:
- A break such as
in-ternationalizationwould be permitted becauseinhas 2 letters, but under the rule8 3 3, it will be suppressed because at least 3 letters must precede the hyphen. The browser will instead look for a break likeinter-nationalization. - A break at the end leaving only two characters (such as
internationaliza-on) is similarly rejected, forcing the engine to retain at least three characters on the subsequent line.
Implementation Example
For hyphenate-limit-chars to function properly, the HTML
document or target element must declare a valid lang
attribute so the browser can reference the correct hyphenation
dictionary.
<!DOCTYPE html>
<html lang="en">
<head>
<style>
.refined-text {
width: 280px;
text-align: justify;
hyphens: auto;
-webkit-hyphenate-limit-chars: 6 3 3;
hyphenate-limit-chars: 6 3 3;
}
</style>
</head>
<body>
<p class="refined-text">
Typography requires consistent management of line lengths and balanced word breaks to preserve readability.
</p>
</body>
</html>A configuration of 6 3 3 or 8 3 3 is
standard for digital editorial design. It prevents small two-letter
prefixes or suffixes from isolating themselves on separate lines,
maintaining a balanced typographic rhythm across responsive
containers.