<MyRusakov.ru />

WordPress 6 с Нуля до Гуру

WordPress 6 с Нуля до Гуру

Этот курс научит Вас созданию самых разных сайтов на самой популярной в мире CMS - WordPress. Вы увидите установку и настройку локального сервера, разбор каждой настройки, каждой кнопки и каждого пункта меню в панели WordPress.

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

Помимо уроков к курсу идут упражнения для закрепления материала.

И, наконец, к курсу идёт ценнейший Бонус по тому, как используя ChatGPT и создавая контент для сайта, можно выйти на пассивный доход. Вы наглядно увидите, как зарегистрироваться в ChatGPT (в том числе, и если Вы из России), как правильно выбрать тему для сайта, как правильно генерировать статьи для него(чтобы они индексировались поисковыми системами) и как правильно монетизировать трафик на сайте.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Адаптивная сетка на CSS Grid: auto-fit, auto-fill и minmax — простое руководство

Адаптивная сетка на CSS Grid: auto-fit, auto-fill и minmax — простое руководство

CSS Grid — самый простой способ собрать адаптивную сетку карточек, галерей и списков товаров без десятка @media. Ключ к магии — связка repeat(auto-fit, minmax()). Разберём её шаг за шагом, покажем практичные паттерны и частые ошибки, чтобы вы сразу применили это в продакшене.

Задача, которую решаем

  • Карточки автоматически переносятся на новую строку без медиазапросов.
  • Минимальная ширина карточки соблюдается, контент не ломается.
  • Отступы стабильны, верстка «дышит».

Быстрый старт: базовая сетка (не адаптивная)

Начнём с простого примера, который фиксирует три колонки и не подстраивается под экран.

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

Такой код создаёт 3 равные колонки, но на узких экранах карточки начнут ужиматься слишком сильно.

Делаем адаптивно: minmax + auto-fit

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

.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

Как это работает:

  • minmax(220px, 1fr) — колонка не станет уже 220px, но может расти до 1fr (равная доля свободного места).
  • auto-fit — автоматически «подгоняет» количество колонок под доступную ширину, «схлопывая» пустые дорожки.

auto-fit vs auto-fill: в чём разница?

Оба пытаются разместить максимум колонок, но пустые дорожки ведут себя по-разному:

  • auto-fit — схлопывает пустые дорожки, элементы растягиваются и равномерно занимают строку.
  • auto-fill — сохраняет «призрачные» колонки, из-за чего видимые элементы не растягиваются до края.
/* Растягивать карточки на всю ширину строки */
.grid-fit { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
/* Оставлять фиксированную сетку с пустыми местами */
.grid-fill { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }

В большинстве случаев для карточек удобнее auto-fit — визуально сетка выглядит «плотнее».

Отступы и выравнивание

.grid {
  display: grid;
  gap: clamp(12px, 2vw, 24px); /* адаптивные отступы */
  align-items: stretch;         /* элементы равной высоты в строке */
}
.card {
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  padding: 16px;
  box-sizing: border-box;
}

Карточка с кнопкой, прижатой к низу

Частая задача: заголовок, текст любой длины и кнопка снизу. Удобно решить внутренней сеткой карточки.

.card {
  display: grid;
  grid-template-rows: auto 1fr auto; /* контент растягивается, кнопка внизу */
  gap: 12px;
}
.card__title { font-weight: 600; }
.card__text  { color: #4b5563; }
.card__btn   { align-self: end; }

Полный рабочий пример: сетка карточек

<section class="catalog">
  <div class="grid">
    <article class="card">
      <h3 class="card__title">Карточка №1</h3>
      <p class="card__text">Короткое описание товара или статьи.</p>
      <button class="card__btn">Подробнее</button>
    </article>
    <article class="card">
      <h3 class="card__title">Карточка №2</h3>
      <p class="card__text">Здесь текста побольше, чтобы показать, что высота карточек в строке выравнивается автоматически по самой высокой.</p>
      <button class="card__btn">Подробнее</button>
    </article>
    <!-- ... ещё карточки ... -->
  </div>
</section>

/* CSS */
.catalog {
  padding: 24px;
  background: #f8fafc;
}
.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.card {
  display: grid;
  grid-template-rows: auto 1fr auto;
  gap: 12px;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  padding: 16px;
  box-sizing: border-box;
}
.card__title { margin: 0; font-size: 18px; }
.card__text  { margin: 0; line-height: 1.5; color: #4b5563; }
.card__btn   { justify-self: start; }

Когда пригодится auto-fill

Используйте auto-fill, если хотите сохранить «ритм» сетки и равные ширины даже при нехватке элементов (например, в админке, где ожидается фиксированная сетка).

.admin-grid { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }

Частые ошибки и как их избежать

  • Слишком маленький min: minmax(120px, 1fr) приводит к узким «палкам». Подбирайте реальный минимум (обычно 200–280px).
  • Перепутанные аргументы minmax: min должен быть меньше max. Пишите minmax(240px, 1fr), а не наоборот.
  • Жёсткие фиксированные ширины внутри карточки: большие изображения без ограничений ломают сетку. Используйте max-width: 100% и aspect-ratio.
  • Забытый box-sizing: добавляйте box-sizing: border-box, чтобы паддинги не «распирали» колонки за пределы min.
  • Непредсказуемые отступы: ставьте gap вместо margin между карточками — проще и надёжнее.

Ещё пара приёмов для устойчивой сетки

/* Предотвращаем скачки при загрузке изображений */
.card img {
  width: 100%;
  height: auto;
  display: block;
  aspect-ratio: 4 / 3; /* резервируем место под фото */
  object-fit: cover;
}

/* Управление максимальной шириной контейнера */
.container {
  width: min(100% - 32px, 1200px);
  margin-inline: auto;
}

/* Адаптивные размеры без @media */
:root {
  --space: clamp(12px, 2vw, 24px);
}
.grid { gap: var(--space); }

Итог

Связка repeat(auto-fit, minmax()) — базовый и крайне мощный приём для адаптивных сеток на CSS Grid. Он решает 80% кейсов карточек и галерей без медиазапросов. Освойте его, и ваши интерфейсы будут автоматически подстраиваться под ширину экрана, сохраняя аккуратный вид.

Хотите быстро перейти от теории к практике, собрать реальные макеты и закрепить знания по Grid, Flex и типографике? Попробуйте курс: Прокачать вёрстку на практике в курсе «Вёрстка сайта с нуля 2.0».

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.