HTML и CSS
Для чего модуль
Научиться верстать не «чтобы выглядело похоже», а как инженер: с семантикой, доступностью, устойчивым layout и предсказуемым поведением в реальных данных.
Результат после прохождения
- Вы проектируете разметку как контракт для браузера, скринридеров и SEO.
- Вы выбираете Flex/Grid/адаптивные техники по задаче, а не по привычке.
- Вы управляете каскадом и специфичностью без хаотичных
!important. - Вы умеете снижать CLS и визуальные регрессии на реальных экранах.
Термины и аббревиатуры
| Термин | Коротко |
|---|---|
Semantic HTML | Смысловая разметка |
ARIA | Атрибуты доступности |
Specificity | Приоритет CSS |
Responsive | Адаптация под экраны |
CLS | Метрика визуального сдвига |
Фокус по грейдам
Junior: понимать базовые механики и объяснять их простыми примерами.Middle: применять тему в продуктовых сценариях с учетом рисков и ограничений.Senior: управлять архитектурными trade-offs, метриками и эволюцией решения.
Как работать с модулем
- Берите один реальный экран (каталог, форма, карточка) и улучшайте его по урокам.
- После каждого урока проверяйте страницу в keyboard-only режиме.
- Для каждой правки фиксируйте причину: UX, a11y, производительность, поддерживаемость.
Программа модуля
Урок 1. Семантика и доступность
Цель: строить HTML-структуру, которую корректно читают браузер, assistive-технологии и поисковики.
Семантика как структура смысла
- Используйте
header/main/nav/aside/footerдля смысловых областей. - Заголовки (
h1...h6) должны отражать иерархию контента. - Кнопка — для действия, ссылка — для навигации.
Формы и доступность
- У каждого input должен быть связанный label.
- Ошибки валидации должны быть программно связаны с полем.
- Состояния
focus,disabled,invalid— обязательная часть UX.
<label for="email">Email</label>
<input id="email" name="email" type="email" aria-describedby="email-error" />
<p id="email-error" role="alert">Введите корректный email</p>
ARIA: только когда нативного HTML недостаточно
- Сначала используйте нативные элементы.
- ARIA не исправляет плохую структуру, а дополняет корректную.
- Избыточная ARIA часто ухудшает доступность.
Где ломается в проде
- Placeholder используется как замена label.
- Модалка не держит focus trap.
- Нельзя пройти ключевой user-flow с клавиатуры.
Мини-задача (обязательная)
Возьмите форму логина и доведите до базового a11y уровня: label, ошибки, keyboard-nav, видимый focus, корректные role/aria.
Что спросит интервьюер: почему placeholder не заменяет label.
Критерий готовности по уроку: вы можете пройти критичный сценарий страницы только клавиатурой и объяснить, почему разметка семантически корректна.
Урок 2. Layout и адаптивность
Цель: собирать устойчивые layout, которые не разваливаются от реального контента.
Flexbox vs Grid
- Flex — одно измерение (ряд или колонка).
- Grid — двумерная сетка (ряды + колонки).
- В сложных экранах обычно используется комбинация Flex + Grid.
Responsive стратегии
- Mobile-first как дефолт.
min/max/clampдля гибкой типографики и размеров.- Проверка edge-cases: длинные слова, пустые блоки, сверхдлинные списки.
Типовые источники layout-багов
- Неправильные
min-widthв flex-контейнере. 100vhна mobile без учета системных UI панелей.- Неуправляемый overflow и «прыжки» интерфейса.
Мини-задача (обязательная)
Сверстайте карточный список с 3 breakpoints и проверьте: очень длинный заголовок, пустое описание, 50+ карточек.
Что спросит интервьюер: когда Grid лучше Flexbox и наоборот.
Критерий готовности по уроку: layout остается стабильным на основных ширинах и edge-cases без ad-hoc фиксов.
Урок 3. CSS-архитектура
Цель: сделать стили масштабируемыми и безопасными для командной разработки.
Каскад и специфичность
- Сначала управляйте порядком и слоем, а не повышайте специфичность.
- Используйте
:where()/слои/утилитарные классы осознанно. !important— только как исключение с документированной причиной.
Стратегии организации стилей
- Component-scoped стили для локальности.
- Design tokens для цветов/spacing/typography.
- Единые naming rules и правила композиции классов.
Антипаттерны
- Глобальные селекторы, которые задевают чужие компоненты.
- Копипаст переменных и «почти одинаковых» классов.
- Стили, завязанные на структуру DOM, которая часто меняется.
Мини-задача (обязательная)
Разберите конфликт специфичности в существующем экране
и устраните его без !important.
Добавьте короткий комментарий, почему решение устойчивое.
Что спросит интервьюер: как вы организуете CSS в команде из нескольких разработчиков.
Критерий готовности по уроку: вы можете объяснить CSS-структуру проекта так, чтобы новый разработчик не ломал соседние фичи.
Урок 4. Производительность и UX
Цель: понимать, как решения в HTML/CSS влияют на скорость и визуальную стабильность.