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 влияют на скорость и визуальную стабильность.
Влияние верстки на метрики
- Ресурсы выше fold влияют на LCP.
- Нестабильные размеры блоков и media влияют на CLS.
- Тяжелые CSS-эффекты могут ухудшать responsiveness.
Практические техники
- Резервируйте размеры для изображений/баннеров.
- Оптимизируйте font loading и fallback-шрифты.
- Проверяйте критические состояния skeleton/loading/empty.
Где ломается в проде
- Асинхронно подгружается контент без зарезервированного пространства.
- Иконки/шрифты подменяются с заметным layout shift.
- Стили «для красоты» ухудшают время интерактивности.
Мини-задача (обязательная)
Уменьшите CLS одного экрана и зафиксируйте: исходное значение, изменения, итоговое значение и визуальный эффект.
Что спросит интервьюер: какие CSS-решения чаще всего вызывают деградацию рендеринга.
Критерий готовности по уроку: вы связываете каждое изменение в верстке с метрикой и пользовательским эффектом.
Перед DevTools-практикой пройдите Browser Rendering: layout change и transform composite, чтобы различать layout/paint/composite стоимость.
Практика
1. Semantic structure и accessible form
Связка: Senior q-9, DOM/a11y audit pack.
Что сделать:
- Сверстайте форму логина или заявки с
label,fieldset/legendтам, где есть группа, понятным error text и predictable focus order. - Проверьте keyboard-only сценарий: tab order, submit, ошибка, возврат фокуса к проблемному полю.
- Запишите, что именно услышит screen reader для поля с ошибкой.
Артефакт: HTML-фрагмент формы + a11y audit table check -> expected -> actual -> fix.
Критерий готовности: вы объясняете семантику через поведение пользователя и assistive tech, а не через список тегов.
2. Layout, responsive и overflow
Связка: HTML, CSS,
строка HTML, CSS and rendering в Practice Bridges.
Что сделать:
- Сверстайте экран
form + card listв 3 брейкпоинтах: mobile, tablet, desktop. - Добавьте long content cases: длинный email, длинный заголовок карточки, пустое состояние, 1 карточка, 20 карточек.
- Исправьте один конфликт специфичности без
!importantи зафиксируйте, почему выбранный selector устойчивее.
Артефакт: layout checklist breakpoint -> content case -> risk -> fix, плюс короткая specificity note.
Критерий готовности: вы можете показать, где layout ломается, почему это происходит и какой CSS-выбор чинит причину, а не симптом.
3. Rendering, CLS/LCP и DevTools evidence
Связка: Senior q-3, Next.js q-14, Rendering, Browser Rendering: layout thrashing.
Что сделать:
- Найдите один риск CLS: изображение без размеров, поздний баннер, web font shift или динамический контент над fold.
- Найдите один риск LCP: тяжелое hero/image, render-blocking CSS/JS или поздняя загрузка критичного контента.
- Зафиксируйте baseline/after: что изменилось, какая метрика затронута, какой пользовательский эффект улучшился.
Артефакт: mini performance note problem -> evidence -> fix -> expected metric impact -> user impact.
Критерий готовности: вы связываете HTML/CSS-решение с измеримой метрикой и можете доказать изменение через DevTools/Lighthouse trace.
Связь с треками и вопросами
- Для базы: сначала закройте этот модуль, затем HTML и CSS.
- Для senior-level объяснения: добавьте Senior q-3 и Senior q-9.
- Для практического контроля: используйте DOM/a11y audit pack и строку
HTML, CSS and renderingв Practice Bridges. - Повторение: сначала артефакт, потом ответ. Без готового audit/performance note ответ считается только теорией.
Критерий готовности
Ready: вы аргументируете HTML/CSS-решения через доступность, устойчивость layout и измеримый UX-эффект.
Partial: вы умеете сверстать экран, но не показываете keyboard/a11y проверку, overflow cases или baseline/after.
Not ready: вы пересказываете CSS-свойства без конкретного DOM/layout/performance бага и без проверки в браузере.
Артефакты после модуля
- HTML-фрагмент доступной формы + error/focus rules.
- A11y audit table
check -> expected -> actual -> fix. - Responsive layout checklist для 3 брейкпоинтов и long content cases.
- Specificity note: как исправлен конфликт без
!important. - Mini performance note по CLS/LCP с baseline/after и пользовательским эффектом.