← Все вопросы

Как сделать колонки одинаковой высоты в CSS?

Задан 32 месяца назад1.3к просмотров2 ответа
9

В трёх колонках разное количество текста, и блоки получаются разной высоты — выглядит криво. Раньше для этого делали жуткие хаки. Как сейчас проще всего выровнять колонки по высоте?

2 ответа

14
✓ Принятый ответ — помог автору

Сейчас это решается одной строкой, потому что и flexbox, и grid по умолчанию растягивают элементы по высоте самого высокого.

Через flexbox:

.row {
  display: flex;
  gap: 16px;
}
.col { flex: 1; } /* равная ширина */
<div class="row">
  <div class="col">Мало текста</div>
  <div class="col">Очень много текста, в несколько строк, длинный абзац...</div>
  <div class="col">Средне</div>
</div>

Все три колонки автоматически станут одинаковой высоты — за это отвечает значение align-items: stretch, которое стоит по умолчанию. Вам ничего дополнительно делать не нужно.

Важно: если вы где-то прописали align-items: center или flex-start, растягивание отключится и колонки снова станут разной высоты. Уберите это переопределение.

Через grid — то же самое автоматически:

.row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

Ячейки одной строки грида всегда равны по высоте. Старые приёмы с table или огромными паддингами больше не нужны.

5

Если внутри колонки нужно ещё и прижать кнопку к низу (чтобы у всех карточек кнопки были на одном уровне), сделайте саму колонку флекс-колонкой:

.col { display: flex; flex-direction: column; }
.col .btn { margin-top: auto; }

margin-top: auto съедает всё свободное место сверху и толкает кнопку вниз. Колонки при этом остаются равной высоты за счёт внешнего флекса.

Ваш ответ

Войдите, чтобы ответить на вопрос.