Grid — это про строки и колонки сразу, а не только про ряд как во flex.
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
Три карточки в ряд, gap раздвигает без лишних margin, которые вечно слипаются или дублируются. Хочешь адаптив без медиазапросов — меняй фиксированное число колонок на авто-подбор.
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
Тут браузер сам решает сколько карточек влезет в ряд, а minmax не даёт им сжаться меньше 220px. На узком экране останется одна колонка, на широком влезет и пять, никаких точек перелома руками не считаешь.
Если нужны строки разной высоты под конкретные блоки — grid-template-rows и grid-template-areas, но для каталога товаров это обычно лишнее, там и repeat с auto-fit решает всё.
Ещё момент: grid-gap устарел, теперь просто gap, работает и во flex, и в grid одинаково. Один нюанс на будущее: если карточки должны быть одинаковой высоты в ряду, grid сам растягивает их по умолчанию, в отличие от flex, где для этого нужны дополнительные свойства.
Порядок карточек в разметке обычно совпадает с порядком в сетке, но при желании order меняет визуальный порядок без переписывания html, только не увлекайся, для доступности лучше не путать визуальный и настоящий порядок в разметке.
И да, дети grid не обязаны быть flex или блочными, любой div внутри просто садится в свою ячейку сам.
Лучший ответ
Датахакер
Датахакер
Как сделать grid css?
я через flex обычно делаю, гриду так и не научилась нормально