Hai công thức, tuỳ số dòng cần giữ.
Một dòng:
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}Nhiều dòng:
.clamp-3 {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}Dù mang tiền tố -webkit-, line-clamp chạy trên mọi browser hiện đại (Chrome, Safari, Firefox 68+, Edge) — đây là một trong số ít tiền tố đã thành chuẩn trên thực tế. Từ Chrome 126+ có thêm line-clamp không tiền tố.
Lưu ý 1: một dòng mà nằm trong flex/grid item thì thường không cắt được, vì item không co nhỏ hơn nội dung:
.flex-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }Thiếu min-width: 0 là nguyên nhân số một của "đã set ellipsis mà vẫn tràn".
Lưu ý 2: -webkit-line-clamp cần đúng bộ ba display: -webkit-box + -webkit-box-orient: vertical + overflow: hidden. Thiếu một dòng là không có tác dụng, và không có cảnh báo nào.
Lưu ý 3: dấu ba chấm chỉ là hiển thị — nội dung đầy đủ vẫn nằm trong DOM, screen reader vẫn đọc hết. Cần cắt thật thì phải cắt ở dữ liệu.