🔒 Ты не вошёл(вошла) в аккаунт — прогресс, работы и результаты теста не сохраняются. Что недоступно?
✅ Без входа можно
- читать все 33 занятия, смотреть слайды и шпаргалку;
- пробовать код в редакторе и песочнице.
⛔ Без входа нельзя
- сохранять работы — черновик живёт только в этом браузере и пропадёт при очистке истории, в режиме инкогнито или на другом устройстве;
- отмечать пройденные занятия и видеть свой прогресс;
- выбрать тему итогового проекта и отмечать чек-лист;
- отправить итоговый тест и сохранить результат.
CSS Grid
Сегодня мы соберём ровную галерею работ в виде сетки, как в фотоальбоме.
Изучаем: display: grid, колонки, строки, gap
Результат: Галерея работ
👀 Сегодня сделаем вот такое
Показать код примера
<h1>Галерея работ</h1>
<div class="gallery">
<img class="big" src="/images/mountain.svg" alt="Горы">
<img src="/images/cat.svg" alt="Кот">
<img src="/images/dog.svg" alt="Собака">
<img src="/images/rocket.svg" alt="Ракета">
<img src="/images/cat.svg" alt="Кот ещё раз">
<img src="/images/dog.svg" alt="Собака ещё раз">
</div>
body {
font-family: sans-serif;
padding: 16px;
}
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12px;
}
.gallery img {
width: 100%;
height: 100%;
aspect-ratio: 1;
object-fit: cover;
border-radius: 12px;
background: #dfe6e9;
}
.big {
grid-column: span 2;
grid-row: span 2;
}
💡 Объяснение
Сетка — как тетрадь в клетку
Flexbox отлично раскладывает элементы в одну линию (ряд или колонку). А когда нужно сразу и строки, и столбцы — галерея фотографий, плитка карточек, раскладка всей страницы — удобнее CSS Grid. Grid делит контейнер на клетки, как тетрадь или шахматную доску, и расставляет элементы по ним.
Включаем сетку
.gallery {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 16px;
}
Как и во Flexbox, свойства пишем родителю, а его прямые дети автоматически раскладываются по клеткам: слева направо, а когда ряд заполнен — на следующую строку.
Колонки: grid-template-columns
Сколько значений — столько колонок. Каждое значение — ширина колонки:
200px 200px 200px— три колонки по 200 пикселей;1fr 1fr 1fr— три равные колонки на всю ширину.fr(fraction — доля) — это доля свободного места, как кусочки пиццы;2fr 1fr— две колонки, первая вдвое шире второй;250px 1fr— боковая колонка 250px, а основная забирает всё остальное.
Чтобы не повторять одно и то же, есть repeat: repeat(4, 1fr) = 1fr 1fr 1fr 1fr.
Строки и промежутки
grid-template-rows— высоты строк (часто не нужно: строки создаются сами по содержимому);gap: 16px;— промежутки между клетками по обеим осям;gap: 20px 10px;— между строками 20, между колонками 10.
Большой элемент на несколько клеток
.big {
grid-column: span 2; /* занять 2 колонки */
grid-row: span 2; /* и 2 строки */
}
Так в галерее делают одну «главную» фотографию крупнее остальных. Остальные элементы сами обтекают её и занимают свободные клетки.
Адаптивная сетка без медиазапросов
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
Это «волшебная формула»: «сделай столько колонок, сколько влезет, но каждая не уже 150px, а остаток места раздели поровну». На широком экране будет 6 колонок, на планшете 4, на телефоне 2 — и ни строчки дополнительного кода. minmax(a, b) означает «не меньше a и не больше b».
Одинаковые картинки в галерее
Фотографии бывают разных пропорций, и сетка получается неровной. Решение:
.gallery img {
width: 100%;
aspect-ratio: 1; /* квадрат (1:1). Для 4:3 — 4 / 3 */
object-fit: cover; /* заполнить клетку, лишнее обрезать */
border-radius: 12px;
}
object-fit: cover работает для картинок так же, как background-size: cover для фона: картинка не растягивается и не сплющивается, а аккуратно обрезается.
Раскладка страницы: grid-template-areas
Grid умеет рисовать раскладку «картинкой» из названий областей:
.page {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-areas:
"header header"
"menu content"
"footer footer";
}
header { grid-area: header; }
nav { grid-area: menu; }
main { grid-area: content; }
footer { grid-area: footer; }
Каждая строка в кавычках — строка сетки, каждое слово — клетка. Одинаковые слова рядом объединяются в одну область.
Flexbox или Grid?
- Flexbox — одно направление: меню, ряд кнопок, шапка, элементы внутри карточки.
- Grid — два направления: галерея, плитка карточек, раскладка страницы.
Их часто используют вместе: страница разложена Grid, а меню в шапке — Flexbox.
Потренируйся
Игра Grid Garden (cssgridgarden.com, есть русский язык): поливай морковку, управляя свойствами Grid.
Частые ошибки
display: gridбезgrid-template-columns— все элементы в одну колонку, «ничего не изменилось».- Картинки разной высоты — нет
aspect-ratioиobject-fit. - Колонки в px на всю ширину — на телефоне сетка вылезает за экран. Используй fr и minmax.
- Опечатка в названии области в grid-template-areas.
Проверь себя
- Что означает
1fr? - Как сделать, чтобы элемент занимал две колонки?
- Когда лучше Flexbox, а когда Grid?
⌨️ Практика
- Сделай галерею из 6 картинок в 3 колонки.
- Добавь промежутки gap и скругли углы картинкам.
- Сделай первую картинку большой — на 2 колонки и 2 строки.
- Замени колонки на repeat(auto-fill, minmax(150px, 1fr)) и сузь окно.
🧪 Редактор
🪞 Рефлексия
- Что нового я сегодня узнал(а)?
- Что получилось лучше всего?
- Где было трудно и что поможет в следующий раз?
🔒 Отметить занятие пройденным можно только после входа. Без аккаунта сайт не запомнит, до какого занятия ты дошёл(дошла). Регистрация · Вход