text-wrap
Определение и применение
Свойство text-wrap управляет переносом строк и выбором мест разрыва. Оно объединяет разрешение переноса
text-wrap-mode и стратегию раскладки text-wrap-style, позволяя, например, сделать строки
заголовка ближе по длине.
Как подобрать переносы для короткого заголовка и абзаца — в уроке «Форматирование текста в CSS».
Попробуйте значения text-wrap
Сравните переносы при разной ширине. В узком варианте обратите внимание на последнюю строку: balance стремится выровнять длины всех строк, а pretty — избежать слишком короткой последней строки. Результат зависит от браузера.
text-wrap: wrap
HTML и CSS примера
<div class="stage">
<h3 class="demo-target" style="width: 280px">
Простые советы для прогулки с собакой в парке
</h3>
</div>
<div class="stage">
<h3 class="demo-target" style="width: 190px">
Простые советы для прогулки с собакой в парке
</h3>
</div>
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 340px;
padding: 16px;
background: white;
color: #172c3d;
font: 16px/1.5 system-ui;
}
.demo-target {
max-width: 100%;
margin: 0;
font-size: 18px;
line-height: 1.3;
text-wrap: wrap;
}
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 340px;
padding: 16px;
background: white;
color: #172c3d;
font: 16px/1.5 system-ui;
}
.demo-target {
max-width: 100%;
margin: 0;
font-size: 18px;
line-height: 1.3;
text-wrap: balance;
}
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 340px;
padding: 16px;
background: white;
color: #172c3d;
font: 16px/1.5 system-ui;
}
.demo-target {
max-width: 100%;
margin: 0;
font-size: 18px;
line-height: 1.3;
text-wrap: pretty;
}
Поддержка браузерами
Спецификация: CSS text-4
Поддерживается во всех основных браузерах с 2024 года.
Отдельные значения (1) поддерживаются не везде — смотрите таблицу.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
text-wrap | 114 | 114 | 121 | 100 | 17.4 | 114 | 121 | 76 | 17.4 | 23.0 | 114 | 17.4 |
auto | 130 | 130 | 121 | 115 | 17.4 | 130 | 121 | 86 | 17.4 | 28.0 | 130 | 17.4 |
balance | 114 | 114 | 121 | 100 | 17.5 | 114 | 121 | 76 | 17.5 | 23.0 | 114 | 17.5 |
nowrap | 114 | 114 | 124 | 100 | 17.4 | 114 | 124 | 76 | 17.4 | 23.0 | 114 | 17.4 |
pretty | 117 | 117 | 103 | 26 | 117 | 78 | 26 | 24.0 | 117 | 26 | ||
stable | 130 | 130 | 121 | 115 | 17.5 | 130 | 121 | 86 | 17.5 | 28.0 | 130 | 17.5 |
wrap | 114 | 114 | 124 | 100 | 17.4 | 114 | 124 | 76 | 17.4 | 23.0 | 114 | 17.4 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
Поддержка pretty, stable и avoid-short-last-line отличается от поддержки самого
сокращения. При неподдерживаемом значении объявление игнорируется: оставляйте нормальный перенос рабочим запасным
вариантом.
CSS синтаксис:
text-wrap: [ wrap | nowrap ] ||
[ auto | balance | stable | pretty | avoid-short-last-line ];
/* Глобальные значения */
text-wrap: initial | inherit | unset | revert | revert-layer;
| разделяет варианты внутри группы. || позволяет указать одну или обе группы в любом
порядке. Например, balance означает wrap balance, а nowrap —
nowrap auto.
JavaScript синтаксис:
element.style.textWrap = "balance";Начальное значение свойства
text-wrap-mode—wrap.text-wrap-style—auto.
Значения свойства
| Значение | Описание |
|---|---|
wrap |
Разрешает мягкие переносы в доступных точках, например между словами. |
nowrap |
Запрещает мягкие переносы. Явный разрыв <br> остаётся; длинный текст может выйти за границу.
|
auto |
Браузер выбирает обычную стратегию разбиения строк. |
balance |
Старается приблизить длины строк. Подходит коротким заголовкам; число обрабатываемых строк может ограничиваться браузером. |
stable |
При редактировании старается не менять уже расположенные строки перед местом изменения. |
pretty |
Разрешает более тщательный подбор переносов для аккуратных абзацев, в том числе уменьшение слишком коротких последних строк. |
avoid-short-last-line |
Новая стратегия, направленная на предотвращение слишком короткой последней строки. Поддержка ограничена; это не гарантия отсутствия любого одинокого слова. |
initial
|
Устанавливает начальное значение свойства. |
inherit
|
Наследует вычисленное значение свойства у родительского элемента. |
unset
|
Для наследуемого свойства text-wrap наследует вычисленное значение у родительского элемента. |
revert
|
Отменяет заданное в коде значение свойства для этого элемента: применяются пользовательские или стандартные стили браузера. Если они не задают значение, свойство наследуется или получает начальное значение по обычным правилам. Не возвращает значение из предыдущей строки CSS. |
revert-layer
|
Сбрасывает значение свойства для текущего слоя каскада @layer. Применяется значение из другого слоя
по правилам каскада; если подходящего значения нет, возможен откат к стилям пользователя или браузера.
|
Переносы без выравнивания текста
balance не центрирует текст: для этого отдельно нужен
text-align. В отличие от
white-space, сокращение не управляет схлопыванием пробелов. При изменении только стратегии можно использовать
text-wrap-style, сохранив текущий режим переноса.
Для длинного адреса без пробелов нужна допустимая точка разрыва или
overflow-wrap; balance сам по себе не решает переполнение. Алгоритмы pretty и balance могут
давать разные результаты в разных браузерах. Не ставьте ручные <br> только ради точного совпадения
строк на одном размере экрана.
Спецификация
Наследуется
Да.
Анимируемое
Тип анимации — дискретный: значение переключается без плавных промежуточных положений.
Примеры, попробуйте сами
Сбалансированный заголовок
Сузьте результат и сравните balance, wrap и pretty. Меняется выбор точек переноса, а выравнивание остаётся прежним. Результат зависит от длины текста и ширины.
base.css
body {
margin: 1rem;
font:
16px/1.5 system-ui,
sans-serif;
color: #243342;
background: #fff;
}
* {
box-sizing: border-box;
}
h2 {
margin: 0;
font-size: 28px;
line-height: 1.25;
border: 1px dashed #64748b;
padding: 12px;
}
index.html
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Сбалансированный заголовок</title>
</head>
<body>
<h2>Как Тони нашёл короткую дорогу к лесному озеру</h2>
</body>
</html>
style.css
h2 {
max-width: 24ch;
text-wrap: balance;
}