Text Overflow and Line Clamping
The Problem
Truncating text to fit constrained UI areas — cards, list items, navigation — is a common requirement. AI agents often reach for JavaScript-based solutions or generate incomplete CSS that only handles single-line truncation. Multi-line clamping, in particular, requires specific property combinations that are easy to get wrong. The legacy -webkit-line-clamp approach has three required co-dependent properties, and omitting any one of them causes silent failure.
The Solution
CSS provides two main truncation patterns: single-line ellipsis using text-overflow and multi-line clamping using -webkit-line-clamp (with the standard line-clamp property arriving for broader adoption).
Code Examples
Single-Line Ellipsis
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}All three properties are required:
white-space: nowrapprevents line wrappingoverflow: hiddenclips the overflowing contenttext-overflow: ellipsisdisplays the...indicator
<p class="truncate">
This is a very long text that will be truncated with an ellipsis at the end
</p>Multi-Line Clamping (Legacy Syntax)
.line-clamp-3 {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}All four properties are required for this pattern to work. This syntax, despite using -webkit- prefixes, is supported across all major browsers (Chrome, Firefox, Safari, Edge) and is a fully specified behavior.
<div class="card">
<h3>Card Title</h3>
<p class="line-clamp-3">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris.
</p>
</div>Modern line-clamp Property
The standard line-clamp property simplifies the syntax. As of 2025, Chromium-based browsers support this.
.line-clamp-modern {
line-clamp: 3;
overflow: hidden;
}Cross-Browser Safe Pattern
For maximum compatibility, combine both approaches:
.line-clamp {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
line-clamp: 3;
}Practical Card Component
.card {
max-width: 320px;
padding: 1rem;
}
.card__title {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.card__description {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}<article class="card">
<h3 class="card__title">A very long card title that might overflow</h3>
<p class="card__description">
Card description text that can span multiple lines but will be clamped to
exactly three lines with an ellipsis at the end of the third line.
</p>
</article>Expandable Clamped Text
.expandable {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.expandable.is-expanded {
-webkit-line-clamp: unset;
}Handling Clamped Text Accessibility
<p class="line-clamp-3" title="Full text content goes here for tooltip access">
Truncated visible content...
</p>Common AI Mistakes
Forgetting one of the three required properties for single-line truncation — all of
white-space,overflow, andtext-overflowmust be setMissing
display: -webkit-boxor-webkit-box-orient: verticalin multi-line clamping, causing the clamp to silently failUsing JavaScript to truncate text by character count instead of CSS, which breaks at different font sizes and screen widths
Not setting a width constraint on the container —
text-overflow: ellipsisrequires the element to have a bounded width (either explicit or from a flex/grid parent)Using
overflow: hiddenwithouttext-overflow: ellipsis, which clips text mid-character without any visual indicatorApplying
-webkit-line-clampto inline elements — it requires a block-level box with the-webkit-boxdisplay modelNot considering that clamped text hides content from screen readers — the full text is still in the DOM, but visual-only users lose context about how much is hidden
When to Use
Single-line truncation
Navigation items with dynamic labels
Table cells with variable-width content
Tags and badges with constrained widths
Breadcrumb links
Multi-line clamping
Card descriptions in grid layouts
Comment previews in social interfaces
Product descriptions in listing pages
Article excerpts or teasers
When NOT to truncate
Primary content that users need to read in full
Error messages and validation text
Accessibility-critical labels and instructions
Content where the truncated portion changes meaning (e.g., prices, dates)
Tailwind CSS
Tailwind provides truncate for single-line ellipsis and line-clamp-* utilities for multi-line clamping.