PassFront
  1. PassFront
  2. База знаний
  3. Flexbox

Почему flex-элемент не сжимается меньше содержимого и как это исправить?

Flexbox

У flex-элемента значение min-width по умолчанию равно auto, то есть он не сжимается меньше своего содержимого. Длинное слово, таблица или pre поэтому распирают контейнер.

Типичная ситуация

Колонка с flex: 1 содержит длинную строку без пробелов, и из-за неё вся раскладка выходит за экран.

Решение

.content {
  flex: 1;
  min-width: 0;          /* разрешаем сжиматься меньше содержимого */
  overflow-wrap: anywhere;
}

Для вертикального направления аналогично нужен min-height: 0, чтобы дочерний блок с overflow: auto прокручивался, а не растягивал родителя.

Тот же приём в Grid

minmax(0, 1fr) вместо 1fr.

Коротко для собеседования

Минимальный размер flex-элемента равен размеру контента. Лечится min-width: 0 (и min-height: 0 для вертикали).

Другие вопросы раздела