Разработка сайтовПоисковая рекламаБлогКонтакты
Главная / Блог / text-wrap: pretty — как сделать переносы текста в абзацах аккуратнее

text-wrap: pretty — как сделать переносы текста в абзацах аккуратнее

Иногда абзац выглядит нормально почти целиком, но последняя строка состоит из одного-двух слов.

Например:

Хорошая типографика помогает сделать текст удобнее для
чтения и одновременно делает страницу визуально
аккуратнее.

Последняя строка здесь заметно короче остальных. Особенно это бросается в глаза в широких текстовых колонках и на страницах, где много абзацев.

Можно вручную менять ширину блока, размер шрифта или расставлять неразрывные пробелы. Но для обычного текста есть CSS-свойство, которое позволяет браузеру самому попробовать сделать переносы аккуратнее:

p {
    text-wrap: pretty;
}

Что делает text-wrap: pretty

pretty просит браузер учитывать весь текстовый блок при выборе переносов и стараться избегать неудачных вариантов, например слишком короткой последней строки.

При этом браузер не меняет сам текст и не вставляет в HTML дополнительные переносы. Он просто выбирает другой вариант разбиения текста на строки.

Это особенно полезно для обычных абзацев:

.article-content p {
    text-wrap: pretty;
}

В результате текст может выглядеть чуть аккуратнее без дополнительной ручной настройки.

Почему это не то же самое, что text-wrap: balance

У balance и pretty похожая идея, но предназначение разное.

balance старается равномерно распределить текст между строками и хорошо подходит для коротких блоков — прежде всего заголовков:

h1,
h2,
h3 {
    text-wrap: balance;
}

pretty предназначен для более длинного текста:

p {
    text-wrap: pretty;
}

То есть условно:

Заголовок → balance

Абзац → pretty

Нужно ли применять его ко всем абзацам?

Если сайт не содержит огромных объёмов текста, pretty можно задать для основного контента:

.article-content p {
    text-wrap: pretty;
}

Я бы именно ограничивал правило областью контента статьи, а не применял его глобально ко всему сайту.

Например, подписи, таблицы, элементы интерфейса и другие компоненты могут иметь собственную типографическую логику.

Что происходит с производительностью?

В отличие от balance, браузер не обязан пытаться идеально сбалансировать каждую строку. pretty предназначен для улучшения типографики длинного текста и может использовать более дорогой алгоритм переноса.

Поэтому это всё равно не свойство, которое имеет смысл бездумно назначать каждому текстовому узлу страницы.

Для обычной статьи правило уровня .article-content p — вполне разумный вариант.

А если нужен конкретный перенос?

pretty не даёт возможности указать браузеру конкретное место переноса.

Если определённые слова должны оставаться вместе, по-прежнему можно использовать неразрывный пробел:

дизайн и разработка

Но это уже ручное управление конкретным фрагментом текста.

pretty решает другую задачу — позволяет браузеру самостоятельно улучшить общую картину переносов.

Поддержка браузерами

text-wrap: pretty поддерживается современными браузерами. В браузерах без поддержки свойство просто игнорируется, поэтому обычная схема переноса текста сохраняется.

Это делает pretty удобным примером прогрессивного улучшения: можно добавить его в CSS без отдельной версии разметки или JavaScript-проверок.

Для статьи или другого большого текстового блока достаточно:

.article-content p {
    text-wrap: pretty;
}

А для заголовков рядом с ним:

.article-content h1,
.article-content h2,
.article-content h3,
.article-content h4 {
    text-wrap: balance;
}

Получается простое разделение ответственности: balance занимается композицией коротких текстовых блоков, а pretty — аккуратностью длинного текста.

Чтобы не пропустить новые материалы

Подписаться на Telegram

Обсудить проект

Расскажите о задаче в свободной форме - я изучу вводные, сориентирую по срокам и смете и свяжусь с вами.

Отвечаю в течение нескольких часов в рабочее время.
Защита от спама — Яндекс SmartCaptcha

Удобнее текстом? Напишите в Telegram или на hello@kruglov.net