☰
ELEMENTOR / PRACTICE

CSS Grid с minmax() в Elementor: адаптивная сетка без брейкпоинтов

CSS Grid с minmax() в Elementor: адаптивная сетка без брейкпоинтов

Карточки товаров, тарифные планы, категории и публикации часто требуют разного количества колонок на десктопе, планшете и мобильных устройствах. Традиционный подход — создавать отдельные настройки для каждой ширины экрана. Но для многих блоков это лишняя ручная работа.

CSS Grid с функциями minmax() и auto-fit позволяет браузеру самостоятельно определять, сколько колонок помещается в доступную ширину. Когда места становится меньше, элементы переходят на новую строку без набора отдельных брейкпоинтов. В Elementor такой подход особенно удобен для повторяющихся карточек с примерно одинаковой структурой.

Как работает адаптивная сетка с minmax() и auto-fit

В CSS Grid ширина колонок задается через свойство grid-template-columns. Комбинация repeat(auto-fit, minmax(240px, 1fr)) означает: создать столько колонок, сколько может поместиться в контейнере, но не делать каждую колонку уже 240 пикселей.

Функция minmax() определяет минимальное и максимальное значение ширины. В этом примере 240px — минимальная ширина карточки, а 1fr — доля доступного пространства. Если в строку помещаются четыре карточки, они распределят ширину между собой. Если места для четырех карточек уже недостаточно, одна из них автоматически перейдет на следующую строку.

Значение auto-fit сжимает или убирает пустые треки, чтобы имеющиеся элементы могли занять доступное пространство. Для большинства сеток карточек это обеспечивает ожидаемое поведение: колонки растягиваются, а их количество меняется в соответствии с шириной контейнера.

  • minmax(240px, 1fr) задает комфортную минимальную ширину карточки.
  • auto-fit автоматически подбирает количество колонок.
  • gap отвечает за промежутки между карточками.
  • Отдельные правила для 768px или 480px могут не понадобиться.

Как подготовить контейнер в Elementor

Создайте контейнер, в котором размещены карточки, и включите для него режим Grid, если такая опция доступна в вашей конфигурации Elementor. Важно, чтобы именно родительский контейнер был сеткой, а карточки стали его дочерними элементами.

Добавьте контейнеру CSS-класс adaptive-grid. Название класса может быть другим, но оно должно точно совпадать с названием в CSS. Класс обычно задается в настройках контейнера в разделе CSS Classes. Не добавляйте этот класс отдельно каждой карточке — он нужен именно для общего контейнера.

CSS можно разместить в Custom CSS Elementor, если такая возможность доступна в вашем тарифе или настройках, либо в глобальных стилях сайта. Перед публикацией проверьте, что стили действительно подключаются к нужной странице.

  • Убедитесь, что все карточки находятся внутри одного контейнера.
  • Проверьте правильность написания класса adaptive-grid.
  • Не задавайте дочерним карточкам фиксированную ширину, которая конфликтует с Grid.
  • После добавления CSS очистите кэш сайта и браузера, если изменения не отображаются.
.adaptive-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 24px;
}

Как подобрать minmax() и gap для разных блоков

Число 240px не является универсальным правилом. Это минимальная ширина, при которой содержимое карточки должно оставаться удобным для чтения. Для коротких категорий с небольшой иконкой может быть достаточно 180–220px. Для тарифных планов с ценой, списком преимуществ и кнопкой лучше начать с 260–320px.

Ориентируйтесь не только на ширину экрана, но и на внутреннее содержимое. Если заголовки часто переносятся на четыре или пять строк, карточка может выглядеть несбалансированно даже при формально правильной ширине. В таком случае увеличьте минимальное значение или сократите текст.

Отступ gap также влияет на момент переноса элементов. Например, четыре карточки по 240px плюс три промежутка по 24px требуют минимум 1032px без учета внутренних отступов контейнера. Если доступная ширина меньше, браузер уменьшит количество колонок.

  • Для компактных категорий попробуйте minmax(180px, 1fr).
  • Для стандартных информационных карточек часто подходит диапазон 220–280px.
  • Для тарифов и сложных блоков стоит использовать большее минимальное значение.
  • Слишком большой gap может преждевременно перевести сетку с четырех колонок на три.

auto-fit или auto-fill: какую функцию выбрать

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

auto-fill сохраняет виртуальные колонки даже тогда, когда для них нет элементов. Из-за этого карточки могут оставаться более узкими, а в конце строки может появляться свободное место. Такое поведение иногда полезно для специальных макетов, но для обычных карточек auto-fit обычно выглядит естественнее.

Если нужно, чтобы последний ряд не растягивал карточки на всю доступную ширину, можно рассмотреть auto-fill или дополнительные правила выравнивания. Это зависит от дизайна: для новостных карточек растягивание часто приемлемо, а для тарифов может быть нежелательным.

  • Используйте auto-fit для гибкой сетки, которая заполняет строку.
  • Рассматривайте auto-fill, если важна структура потенциальных колонок.
  • Проверяйте последний ряд отдельно: именно там разница наиболее заметна.

Что проверить на планшете и мобильном устройстве

Сетка без брейкпоинтов не означает, что ее не нужно тестировать. Браузер правильно рассчитает колонки, но внутренние отступы, фиксированная ширина и длинные слова могут нарушить макет.

Сначала проверьте ширину самого контейнера. Если у него большие горизонтальные padding, на мобильном устройстве для карточки останется значительно меньше места, чем кажется по ширине viewport. Например, при минимуме 240px и суммарных внутренних отступах 32px карточка может перейти в одну колонку раньше, чем ожидалось.

Затем протестируйте самые длинные заголовки, кнопки, цены и изображения. Карточка не должна создавать горизонтальную прокрутку. Для изображений обычно важно, чтобы они не превышали ширину родительского элемента, а длинные слова или URL не растягивали колонку.

  • Проверьте ширину сетки вместе с padding контейнера.
  • Просмотрите макет на узком смартфоне, а не только в стандартном desktop preview.
  • Найдите горизонтальную прокрутку и определите элемент, который ее создает.
  • Проверьте кнопки: текст не должен выходить за пределы карточки.
  • Убедитесь, что между карточками сохраняются достаточный контраст и заметный промежуток.

Типичные ошибки и способы их исправить

Самая распространенная ошибка — фиксированная ширина карточек. Если дочернему элементу задано width: 300px или минимальная ширина, превышающая значение в minmax(), он может переполнять сетку. Удалите конфликтующее правило или сделайте его совместимым с Grid.

Другая проблема — использование процентной ширины вместе с Grid без необходимости. Grid уже распределяет доступное пространство между колонками, поэтому ручное width: 33.333% для карточек может привести к лишним переносам и переполнению.

Также проверьте стили, унаследованные от flex-контейнера. Свойства flex-basis, flex-grow и flex-shrink не управляют колонками Grid, но другие правила, например min-width или большие margin, могут влиять на результат.

Если элементы не переносятся, проверьте, применен ли CSS-класс к правильному контейнеру, не перекрыто ли display: grid другим правилом и загрузилась ли обновленная версия стилей.

  • Не задавайте карточкам фиксированную ширину без четкой причины.
  • Проверьте min-width, margin и padding дочерних элементов.
  • Не смешивайте без необходимости Grid на родительском уровне и ручную процентную ширину карточек.
  • В DevTools браузера проверьте, какое CSS-правило фактически применяется.

Когда брейкпоинты все же нужны

CSS Grid с minmax() хорошо решает задачу автоматического переноса карточек, но не заменяет все адаптивные настройки. Брейкпоинт может быть уместен, если на разных устройствах нужно изменить не только количество колонок, но и дизайн компонента.

Например, на мобильном устройстве тарифным карточкам может потребоваться другой порядок блоков, меньший размер шрифта, скрытое описание или кнопка на всю ширину. Такие изменения не относятся к ответственности Grid и требуют отдельных CSS-правил или адаптивных настроек Elementor.

Не стоит добавлять брейкпоинт только для того, чтобы вручную установить одну, две или три колонки. Если элементы имеют одинаковую структуру, minmax() и auto-fit обычно делают это точнее и с меньшим объемом кода.

  • Оставляйте Grid без брейкпоинтов для однотипных карточек.
  • Используйте брейкпоинты, когда меняются структура или типографика компонента.
  • Оценивайте не только количество колонок, но и читабельность и удобство взаимодействия.

Частые вопросы

Можно ли создать такую сетку без Elementor Pro?

Да, если в вашей сборке доступно добавление глобального CSS или стилей темы. Сам CSS Grid не зависит от Elementor Pro. При этом место для вставки Custom CSS может отличаться в зависимости от тарифа, темы и настроек сайта.

Почему карточки становятся слишком узкими?

Проверьте минимальное значение в minmax(), ширину контейнера, его горизонтальные отступы и стили дочерних элементов. Если карточка содержит много текста или сложный контент, увеличьте минимальную ширину, например с 220px до 280px.

Чем auto-fit отличается от auto-fill?

auto-fit растягивает имеющиеся карточки, используя свободное место, а auto-fill сохраняет потенциальные колонки. Для большинства адаптивных сеток карточек удобнее использовать auto-fit.

Нужно ли добавлять отдельный брейкпоинт для мобильных устройств?

Не обязательно. Если задача заключается только в автоматическом переходе от нескольких колонок к одной, minmax() и auto-fit справятся без медиазапросов. Брейкпоинт нужен, когда на мобильном устройстве меняются структура или оформление карточки.

Вывод

Для однотипных карточек в Elementor CSS Grid с repeat(auto-fit, minmax()) — простой способ получить адаптивную сетку без ручной настройки нескольких брейкпоинтов. Браузер сам определяет, сколько колонок помещается, а при уменьшении ширины переносит элементы на новую строку.

Начните с minmax(240px, 1fr) и gap: 24px, после чего проверьте реальный контент на планшете и мобильном устройстве. Если карточки выглядят тесными, увеличьте минимальную ширину; если свободного места слишком много — скорректируйте gap, padding или структуру контейнера.

← Все материалы Elementor