Главная идея
Это капстоун: за 49 уроков ты собрал отдельные «детали» — семантику, блочную модель, Flexbox, Grid, медиазапросы, темы, доступность. Финальный урок не вводит новой темы — он показывает, как соединить всё в один работающий сайт по чёткому плану.
Сборка дома из готовых деталей по чертежу. Семантические теги — это несущие стены и комнаты (где спальня, где кухня — браузер и скринридер понимают планировку). CSS-сетка Grid — это план этажа: где крупные зоны. Flexbox — расстановка мебели внутри комнаты. Медиазапросы — складная мебель, которая раскладывается на просторной квартире и компактно сворачивается в студии. А чек-лист качества — это приёмка дома: проверяем проводку (доступность), фундамент (валидность) и теплоизоляцию (производительность), прежде чем заселяться.
Как спланировать проект
Сначала чертёж, потом код. Нарисуй карту сайта (страницы и повторяемые блоки) и каркас одной страницы (wireframe) сверху вниз: header → hero → секции → footer. Так ты увидишь, какие блоки общие, и вынесешь их в одинаковые классы.
Структура и порядок сборки
Итоговый сайт состоит из четырёх страниц: index.html, work.html,
about.html, contact.html. Общие стили лежат в styles.css,
изображения — в assets/img/, а повторяемые блоки (header, footer, карточка)
используют одинаковые классы. CSS делим на слои: tokens (переменные в :root) →
base (сброс и типографика) → components (карточка, кнопка, форма) →
utilities (вспомогательные классы).
Сначала проектируем семантику и навигацию, затем крупную сетку через CSS Grid,
внутреннее выравнивание — через Flexbox, после этого добавляем адаптивные изображения
и preference-медиазапросы (prefers-reduced-motion, prefers-color-scheme).
Базовый CSS: токены и каркас
:root {
color-scheme: light dark;
--space-page: clamp(1rem, 3vw, 2rem);
--space-section: clamp(3rem, 8vw, 7rem);
--color-accent: #2563eb;
}
body {
margin: 0;
font-family: system-ui, sans-serif;
}
.site-header,
.hero {
width: min(100% - var(--space-page) * 2, 72rem);
margin-inline: auto;
}
.site-header {
display: flex;
flex-wrap: wrap;
gap: 1rem;
justify-content: space-between;
padding-block: 1rem;
}
.hero {
display: grid;
gap: clamp(1rem, 4vw, 3rem);
padding-block: var(--space-section);
}
@media (min-width: 64rem) {
.hero {
grid-template-columns: 1fr 1fr;
align-items: center;
}
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms;
transition-duration: 0.01ms;
scroll-behavior: auto;
}
}
Чек-лист качества финального проекта
- Семантика — теги по смыслу (
header,nav,main,section,footer), одинh1на страницу. (уроки 45 БЭМ, 46 ошибки) - Адаптивность — mobile-first, проверка на 320/768/1024/1440px. (уроки 33–34 media, 37 fluid type)
- Доступность —
altу картинок, контраст, видимый:focus-visible, навигация с клавиатуры. - Производительность —
loading="lazy"для картинок ниже первого экрана,width/heightпротив сдвига вёрстки. (урок 49) - Валидность — прогон через W3C Markup и CSS Validator. (урок 48)
- Именование — единый стиль классов (БЭМ):
card,card__title,card--featured.
width в пикселях
не помещаются на узком экране. Делай наоборот — базовый стиль под мобильный, а колонки добавляй
медиазапросом min-width.