Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как обрезать текст многоточием

Короткий ответ

Нужны три свойства вместе: запрет переноса, скрытие лишнего и многоточие:

<p style="width: 220px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">A very long product name that does not fit on one line</p>

white-space: nowrap вытягивает текст в одну строку, overflow: hidden прячет то, что не поместилось, а text-overflow: ellipsis ставит на месте обреза многоточие.

Несколько строк

line-clamp оставляет заданное число строк. Пока свойство работает с префиксом и в паре с display: -webkit-box:

<p style="width: 220px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;">A long product description that takes more than two lines, so the rest of the text hides behind an ellipsis.</p>

Несмотря на префикс, эта запись работает во всех современных браузерах.

Обрезка во flex-строке

Внутри flexbox текст по умолчанию не сжимается меньше своей ширины. Добавьте элементу с текстом min-width: 0:

<div style="display: flex; gap: 8px; width: 240px;">
  <span style="min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">anna.smith.long.email@example.com</span>
  <button>Edit</button>
</div>

Частая ошибка

Многоточие не появляется, если у элемента нет ограниченной ширины или он строчный, как span вне flexbox. text-overflow работает только у блока с шириной и overflow: hidden — по отдельности эти свойства ничего не обрезают.

Функции из этого ответа

  • text-overflow — Как обрезается текст, который не помещается: резко или с многоточием.
  • white-space — Что делать с пробелами и переносами строк из исходного кода и можно ли переносить строки.
  • overflow — Что делать с содержимым, которое не помещается в элемент.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.