🎨
Модуль 2. CSS и оформление
Занятие 21
CSS Grid
Сегодня мы соберём ровную галерею работ в виде сетки, как в фотоальбоме.
Сегодня сделаем вот такое
Сетка как тетрадь в клетку
↔️ Flexbox
одна линия
одна линия
▦ Grid
строки и столбцы
строки и столбцы
Галереи, плитки карточек, раскладка страницы — это Grid.
display: grid
- Свойства — родителю
grid-template-columns— колонкиgap— промежутки- Дети сами заполняют клетки слева направо
<div class="grid">
<div>1</div><div>2</div><div>3</div>
<div>4</div><div>5</div><div>6</div>
</div>
.grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 12px;
}
.grid div {
padding: 24px; text-align: center;
font: bold 24px sans-serif;
background: #74b9ff; border-radius: 10px;
}
Единица fr — кусочки пиццы
1fr 1fr 1fr— три равных куска2fr 1fr— большой и маленький250px 1fr— фиксированный + остальноеrepeat(4, 1fr)— короче
<div class="g"><b>2fr</b><b>1fr</b></div>
<div class="g2"><b>150px</b><b>1fr</b></div>
.g, .g2 { display: grid; gap: 8px; margin: 10px 0; }
.g { grid-template-columns: 2fr 1fr; }
.g2 { grid-template-columns: 150px 1fr; }
b { padding: 20px; color: white; text-align: center; font-family: sans-serif; background: #e17055; border-radius: 8px; }
Галерея с большой картинкой
grid-column: span 2— на 2 колонкиgrid-row: span 2— на 2 строкиaspect-ratio: 1+object-fit: cover— ровные картинки
<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="Кот">
</div>
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 8px;
}
.gallery img {
width: 100%; height: 100%;
aspect-ratio: 1; object-fit: cover;
border-radius: 10px;
}
.big { grid-column: span 2; grid-row: span 2; }
Волшебная формула
repeat(auto-fill, minmax(120px, 1fr))
«Столько колонок, сколько влезет, но не уже 120px»
Сетка сама подстраивается под экран!
<div class="tiles">
<b>🍎</b><b>🍐</b><b>🍊</b><b>🍋</b>
<b>🍌</b><b>🍉</b><b>🍇</b><b>🍓</b>
</div>
.tiles {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
gap: 10px;
}
b { font-size: 44px; text-align: center; padding: 16px; background: #dff9fb; border-radius: 12px; }
Раскладка страницы: areas
Рисуем раскладку словами:
"header header"
"menu content"
"footer footer"
<div class="page">
<header>header</header>
<nav>menu</nav>
<main>content</main>
<footer>footer</footer>
</div>
.page {
display: grid; gap: 8px;
grid-template-columns: 120px 1fr;
grid-template-areas:
"header header"
"menu content"
"footer footer";
font-family: sans-serif;
}
header { grid-area: header; background: #fab1a0; }
nav { grid-area: menu; background: #ffeaa7; }
main { grid-area: content; background: #81ecec; height: 120px; }
footer { grid-area: footer; background: #a29bfe; }
.page > * { padding: 12px; border-radius: 8px; }
Flexbox или Grid?
↔️ Flexbox
меню, кнопки в ряд, шапка
меню, кнопки в ряд, шапка
▦ Grid
галерея, плитка, раскладка страницы
галерея, плитка, раскладка страницы
🎮 Тренировка: cssgridgarden.com — поливаем морковку!
Запомни!
display: gridВключить сеткуgrid-template-columns: repeat(3, 1fr)3 равные колонкиgap: 16pxПромежуткиgrid-column: span 2Занять 2 колонкиminmax(150px, 1fr)Не уже 150pxobject-fit: coverКартинка заполняет ячейку
Практика: Галерея работ
- Сделай галерею из 6 картинок в 3 колонки.
- Добавь промежутки gap и скругли углы картинкам.
- Сделай первую картинку большой — на 2 колонки и 2 строки.
- Замени колонки на repeat(auto-fill, minmax(150px, 1fr)) и сузь окно.
🚀 Со звёздочкой: Сделай раскладку целой страницы на Grid с grid-template-areas: шапка, меню сбоку, контент, подвал. Поиграй в Grid Garden.
🔒 Без входа в аккаунт работу из практики нельзя сохранить на сайте, а занятие — отметить пройденным.
🪞
Подведём итоги
- Что нового я сегодня узнал(а)?
- Что получилось лучше всего?
- Где было трудно и что поможет в следующий раз?
✨ По желанию: Подумай, где на твоём сайте пригодится сетка: галерея, карточки, список фактов.