Как сделать колонки одинаковой высоты в CSS?
В трёх колонках разное количество текста, и блоки получаются разной высоты — выглядит криво. Раньше для этого делали жуткие хаки. Как сейчас проще всего выровнять колонки по высоте?
2 ответа
Сейчас это решается одной строкой, потому что и 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 или огромными паддингами больше не нужны.
Если внутри колонки нужно ещё и прижать кнопку к низу (чтобы у всех карточек кнопки были на одном уровне), сделайте саму колонку флекс-колонкой:
.col { display: flex; flex-direction: column; }
.col .btn { margin-top: auto; }
margin-top: auto съедает всё свободное место сверху и толкает кнопку вниз. Колонки при этом остаются равной высоты за счёт внешнего флекса.