1. Основы HTML и современный CSS: семантика, Flexbox, Grid, адаптивная вёрстка и анимации
Основы HTML и современный CSS: семантика, Flexbox, Grid, адаптивная вёрстка и анимации
Почему две страницы с одинаковым содержимым выглядят настолько по-разному: одна — как профессиональный сайт, а другая — как набросок из 2005 года? Ответ кроется не в дизайнерских талантах, а в умении правильно выбрать HTML-теги и грамотно управлять раскладкой через CSS. Именно эти два навыка — фундамент, на котором строится всё остальное в frontend-разработке.
Семантический HTML: не просто теги, а смысл
Когда вы оборачиваете весь контент страницы в <div> за <div>, браузер видит структуру, но не понимает её. Семантический HTML — это использование тегов, которые описывают роль контента, а не только его внешний вид. Разница между <div class="header"> и <header> кажется косметической, но она критична для трёх групп: поисковых роботов, скринридеров и будущих разработчиков, которые будут читать ваш код.
> Семантическая вёрстка — это когда HTML-теги говорят «что это», а CSS говорит «как это выглядит».
Основные семантические теги, которые нужно использовать в каждом проекте:
<header> — шапка страницы или секции<nav> — блок навигации<main> — основное содержимое страницы (один на страницу)<section> — тематический раздел контента<article> — самодостаточный контент (пост, статья, комментарий)<aside> — побочный контент (сайдбар, врезка)<footer> — подвал страницы или секцииМикропример: блок новостей на сайте — это <section>, каждая отдельная новость внутри него — <article>, а список категорий справа — <aside>.
Почему это важно на практике? Скринридеры используют семантическую структуру для навигации: пользователь может перейти от <nav> к <main>, пропустив <header>. Без семантики весь контент для вспомогательных технологий — однородная масса. А поисковые системы дают больший вес контенту внутри <main> и <article>, чем внутри произвольного <div>.
CSS-раскладка: от Float к Flexbox и Grid
Исторически вёрстка на CSS держалась на хаках: float, position: absolute, таблицы. Эти подходы работали, но превращали простые задачи в головоломки. Flexbox и Grid — современные системы раскладки, каждая из которых решает свой класс задач.
Flexbox (Flexible Box Layout) управляет раскладкой в одном направлении — по горизонтали или по вертикали. Представьте, что вы раскладываете книги на полке: Flexbox решает, сколько места заняла каждая книга, как распределить пустое пространство и что делать, если книг больше, чем места.
Ключевые свойства Flexbox:
| Свойство | Что делает | Частые значения |
|---|---|---|
| flex-direction | Направление оси | row, column |
| justify-content | Распределение по главной оси | center, space-between, space-around |
| align-items | Выравнивание по поперечной оси | center, stretch, flex-start |
| flex-wrap | Перенос элементов | wrap, nowrap |
| gap | Отступ между элементами | 8px, 1rem |
Grid управляет раскладкой в двух направлениях одновременно — по строкам и столбцам. Это как разметка газетной полосы: вы заранее определяете сетку, а контент распределяется по ячейкам.
Когда использовать Flexbox, а когда Grid? Flexbox — для компонентов: навигационная панель, карточка товара, кнопки в ряд. Grid — для макета страницы: шапка-сайдбар-контент-подвал, каталог товаров, галерея. На практике они часто работают вместе: Grid задаёт общий макет, а внутри каждой области Flexbox раскладывает элементы.
Адаптивная вёрстка: один сайт для всех экранов
Адаптивная вёрстка (responsive design) — подход, при котором одна и та же страница корректно отображается на экранах любого размера: от смартфона до широкоформатного монитора. Основной инструмент — медиа-запросы (media queries), которые применяют CSS-правила при определённых условиях.
Три принципа адаптивной вёрстки, которые должен знать каждый стажёр:
min-width медиа-запросы. Это проще и производительнее, чем упрощать десктопную вёрстку для мобильных.rem для размеров шрифтов и vw/vh для вьюпортов вместо фиксированных px там, где нужна гибкость.max-width: 100% и height: auto предотвращают выход изображений за пределы контейнера.Микропример: навигация с пятью пунктами на десктопе — горизонтальный ряд через Flexbox. На экране меньше 768px — превращается в вертикальное меню или «гамбургер»-кнопку.
CSS-анимации: оживляем интерфейс
Анимации в CSS бывают двух видов: переходы (transitions) и ключевые кадры (keyframes). Переходы плавно меняют свойство из одного состояния в другое — например, кнопка при наведении. Ключевые кадры позволяют задать сложную последовательность изменений.
Для более сложных сценариев — @keyframes:
Важное правило: анимируйте только transform и opacity — эти свойства не вызывают перерисовку макета (reflow) и обрабатываются GPU. Анимация width, height, margin или top/left заставляет браузер пересчитывать положение всех элементов на странице, что заметно снижает производительность.
Практический кейс: карточка товара
Разберём типичную задачу стажёра — сверстать карточку товара для каталога.
Семантическая структура:
CSS с Flexbox, адаптивностью и анимацией:
А теперь — каталог из таких карточек через Grid:
repeat(auto-fill, minmax(280px, 1fr)) — это одна из самых полезных конструкций в CSS Grid: она автоматически создаёт столько колонок, сколько помещается, каждая шириной минимум 280px, а свободное пространство распределяется равномерно. Вам не нужно писать отдельные медиа-запросы для каждого количества колонок.
Распространённые ошибки начинающих
Ошибка 1: <div> вместо семантических тегов. Код работает, но становится нечитаемым и недоступным. Каждый <div> с классом header, footer, nav — сигнал, что нужно заменить его на семантический тег.
Ошибка 2: Фиксированные размеры вместо гибких. width: 960px на контейнере — это вёрстка, которая сломается на мобильном. Используйте max-width и относительные единицы.
Ошибка 3: Злоупотребление !important. Если вы пишете !important, значит, проблема в специфичности селекторов, а не в стиле. Пересмотрите структуру CSS.
Ошибка 4: Игнорирование gap в Flexbox и Grid. Раньше отступы между элементами делали через margin, что приводило к лишним отступам у последнего элемента. Свойство gap решает эту проблему элегантно.
Если из этой статьи запомнить три вещи — это: семантические теги делают код доступным и читаемым; Flexbox для компонентов, Grid для макета; анимируйте только transform и opacity.