Урок 32. Примеры: Адаптивная, резиновая и отзывчивая вёрстка

📁 Раздел: Адаптивная вёрстка ⏱️ Время изучения: ~70 мин 🎯 Сложность: Средняя
#max-width #min #width #clamp #margin-inline

⚡ Кратко

Рядом с каждым кодом — живой результат. Сравни поведение fixed и fluid блоков, посмотри, как max-width ограничивает резину, и как auto-fit сам перекладывает карточки. Меняй ширину окна и наблюдай.

В каждом примере сверху — реальный результат, под ним код. Перетаскивай край окна браузера (или меняй ширину в DevTools), чтобы увидеть разницу между типами вёрстки.

1. Fixed — жёсткая ширина в пикселях

Блок всегда 320px. На широком экране — пустое место справа, на узком экране уже 320px — появится горизонтальный скролл.

width: 320px
Не тянусь и не сжимаюсь. На узком экране меня обрежет.
.fixed-box {
  width: 320px;   /* жёстко, не реагирует на окно */
}

2. Fluid — резиновая ширина в процентах

Блок занимает 80% родителя. Сузь окно — он сузится пропорционально, расширь — растянется. Скролла не будет, но без предела строки станут длинными.

width: 80%
Растекаюсь по ширине окна, как вода по сосуду.
.fluid-box {
  width: 80%;   /* % от родителя — тянется вместе с окном */
}

3. Резиновость с пределом: max-width + width: 100%

Главный современный приём. Контейнер тянется (width: 100%), пока не упрётся в max-width: 600px, дальше остаётся фиксированным и центрируется через margin-inline: auto. Лучшее из двух миров.

width: 100%; max-width: 600px
Резиновый до 600px, потом фиксируюсь и встаю по центру.
.container {
  width: 100%;
  max-width: 600px;
  margin-inline: auto;   /* центрируем, когда упёрлись в предел */
}

4. Responsive-сетка: auto-fit + minmax()

Карточки сами перекладываются: при широком окне — несколько в ряд, при узком — в один столбец. Без единого media query — это делает repeat(auto-fit, minmax(...)). Сузь окно и увидишь, как количество колонок меняется.

Карточка 1
Карточка 2
Карточка 3
Карточка 4
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
  gap: .75rem;
}

5. Полный гибкий макет (HTML + CSS)

Связка из теории: контейнер с пределом, «резиновые» отступы и шрифт через clamp(), сетка на auto-fit.

📄 lesson-32/index.html
<main class="page">
  <section class="hero">
    <h1>Гибкий учебный макет</h1>
    <p>Контент задаёт реальные ограничения.</p>
  </section>
</main>
📄 lesson-32/styles.css
.page {
  width: min(100% - 2rem, 72rem);  /* резина с пределом */
  margin-inline: auto;
}

.hero {
  /* отступ и шрифт плавно растут с шириной окна */
  padding: clamp(2rem, 6vw, 6rem);
  font-size: clamp(1rem, 1.6vw, 1.25rem);
}

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
  gap: 1rem;
}
Эксперимент: открой пример в DevTools (F12), включи устройство-эмулятор и меняй ширину — следи, как блоки тянутся, а сетка перекладывает колонки.

Навигация