Ищем баланс с помощью flex-wrap: balance

• css

Введение

text-wrap: balance стал отличным дополнением для тех, кто хотел более красивые заголовки и небольшие тексты (какие-нибудь карточки, например). text-wrap: pretty в чём-то смог доделать и улучшить, а Apple стала промотировать свойство для абзацев текста.

Сегодня text-wrap является простым однострочным улучшением вёрстки, которое “за бесплатно” делает жизнь лучше. А в Хроме 150 появляется новый… Двоюродный брат? Встречайте: flex-wrap: balance.

Сначала посмотрим

Новое значение позволяет решить проблему “висящих” элементов на последней строке.

Логика работы

Для начала вернёмся к простому флексбоксу и логике переносов:

Как это работает? Сначала вычисляется базовый размер, исходят из минимальных размеров и flex-basis. Элементы набиваются в строчки, пока хватает места. Место закончилось – начинаем новую строчку.

Как только строчки упакованы, можно распределять оставшееся место между элементами с flex-grow.

Звучит на что-то похоже? Всё верно, первая часть очень похожа на то, как рисуется текст: слова набиваются в строку, точно также создаются новые строки, и так далее. Единственное – отсутствует второй этап, и слова не растягиваются по ширине (вместо этого есть логика про justify).

Вспоминая text-wrap: balance, который занимался тем, что перекидывал слова между строчками, чтобы достичь наименьшей ширины, мы легко понимаем логику работы flex-wrap: balance: он делает тоже самое, что и text-wrap: balance, а после применяется flex-grow.

Кстати, не забыли и про reverse, достаточно указать flex-wrap: wrap-reverse balance. Конечно, можно и просто flex-wrap: wrap balance, но никакой разницы с просто balance это не несёт.

Фолбек!

Точнее, наполовину. Я думаю, достаточно часто встречаются интерфейсы, состоящие из иконок, карточек и тому подобного. В общем все те места, где flex-grow не используется.

Просто делаем “параграф” из наших блочных элементов, не забываем пробелы между ними, и вуаля:

Что же тогда даёт flex-wrap?

  1. flex-grow у элементов
  2. Контроль выравнивания
  3. Вёрстка проще, отсутствие пробелов
  4. wrap-reverse
  5. Проще контроль отступов
  6. column-rule / row-rule (спойлер к ещё одной новинке недавних релизов)

Итого

Мы снова получили подарок на рождество новый год: однострочное свойство, которое делает вёрстку лучше. И пусть я верю, что text-wrap: balance применим гораздо чаще, всё равно прослеживается тенденция: в браузеры завозят очень простые инструменты для разработчиков, которые под капотом делают невообразимые ранее вещи.

Всё ещё жду уменьшение ширины родительского элемента под ширину строк дочерних элементов. Как раз отлично сочетается с обоими balance.

Обсудить в Telegram

Почитать ещё посты

  • Калькулятор фолбека для corner-shape
  • corner-shape и border-shape: что это и в чём разница?
  • Псевдоэлементы теперь настоящие
  • Проблемы, которые Anchor Positioning не должен был решить
  • shape(): фигуры для всех браузеров