HTML и CSS: структура, адаптивность, доступность и практика вёрстки
После настройки рабочей среды (браузерные DevTools, VS Code, Git, Node.js) вы готовы к первому настоящему навыку фронтенда: превращать идею или макет в страницу, которая корректно выглядит на разных экранах и остаётся удобной для людей с разными потребностями.
В этой статье вы разберёте:
как устроены HTML и CSS и почему их нельзя «мешать в одну кашу»
как делать смысловую структуру страницы, а не просто «набор блоков»
как верстать адаптивно без магии и хака на хаке
базовые принципы доступности (accessibility), чтобы интерфейс был usable для клавиатуры и скринридеров
практический мини-процесс: от структуры к стилям и проверкам в DevToolsПолезные справочники на весь курс:
MDN: HTML
MDN: CSS
MDN: Веб-доступность
WebAIM: Introduction to Web Accessibility
W3C: WCAG OverviewКак HTML и CSS работают вместе
HTML описывает структуру и смысл контента: что является заголовком, где основная часть, где навигация, где список, где форма.
CSS отвечает за визуальное оформление: отступы, цвета, шрифты, сетку, адаптивное поведение.
Правильная модель мышления:
HTML отвечает на вопрос что это такое
CSS отвечает на вопрос как это выглядитЕсли вы сначала делаете смысловую структуру, а потом добавляете стили, то:
проще поддерживать проект
меньше багов с адаптивностью
легче улучшать доступность
AI-помощники дают более точные советы, потому что структура понятнаHTML: структура страницы без «дивного супа»
Вёрстка становится сложной, когда вы используете нейтральные контейнеры для всего подряд и теряете смысл. Вместо этого стремитесь к семантической структуре.
Семантика простыми словами
Семантика означает, что элементы в разметке отражают назначение контента. Например:
header — верхняя часть страницы или секции (обычно логотип, меню, важные действия)
nav — навигация
main — основное содержимое страницы (обычно одно на страницу)
section — крупная смысловая секция
article — самостоятельный материал, который можно читать отдельно
footer — нижняя часть страницы или секцииСемантика помогает:
скринридерам строить понятную «карту» страницы
поисковым системам лучше понимать структуру
вам самим быстрее ориентироваться в проектеКаркас страницы как план
Ниже пример структурного плана страницы в псевдозаписи (это не код, а способ думать):
Если у вас есть такой план, CSS-сетка и адаптивность становятся значительно проще.
Заголовки и логика документа
Заголовки должны отражать структуру текста, а не просто быть «покрупнее».
Правило, которое спасает от хаоса:
один главный заголовок страницы — h1
дальше вложенность идёт по смыслу: h2 для секций, h3 для подразделовЕсли хочется сделать текст крупнее, это задача CSS, а не неправильного уровня заголовка.
Списки, ссылки и кнопки: частые ошибки новичков
Быстрые ориентиры:
если это перечисление однотипных сущностей, используйте список (а не набор строк)
ссылка ведёт на другой адрес или якорь внутри страницы
кнопка запускает действие (открыть меню, отправить форму, удалить элемент)Если путать ссылки и кнопки, страдает доступность и предсказуемость интерфейса.
CSS: базовые принципы, которые решают 80% проблем
Каскад и почему «стиль не применился»
CSS расшифровывается как Cascading Style Sheets, то есть «каскадные таблицы стилей». Каскад означает, что финальный стиль элемента получается как результат конкуренции правил.
Чаще всего стиль «не работает» по одной из причин:
правило перекрыто другим правилом, которое применяется позже
другое правило более специфично
вы стилизуете не тот элемент (ошибка в селекторе)Привычка из прошлой статьи: при проблемах сначала смотрите Elements и Computed в DevTools.
Блочная модель (box model)
Почти любой визуальный баг в верстке можно свести к тому, как браузер считает размеры и отступы.
У элемента есть:
content — содержимое
padding — внутренние отступы
border — рамка
margin — внешние отступы!Схема слоёв блочной модели CSS
Практический совет: почти всегда удобно включать вычисление размеров через box-sizing: border-box, чтобы ширина учитывала padding и border.
Поток документа и варианты раскладки
По умолчанию элементы идут в нормальном потоке: один за другим. Для современных интерфейсов чаще нужны две техники:
Flexbox — для выравнивания и распределения элементов в строке или колонке
Grid — для двумерной сетки (строки и колонки)Мини-ориентир выбора:
если у вас одномерная задача (например, меню в одну линию) — Flexbox
если у вас сетка (например, карточки 3 на 2) — GridПример простого Flexbox-выравнивания:
Пример сетки карточек на Grid:
Адаптивность: чтобы страница работала на телефоне и на широком экране
Адаптивность — это не «сделать отдельно мобильную версию», а настроить дизайн так, чтобы он естественно перестраивался.
Основные инструменты адаптивной верстки
гибкие размеры: проценты, rem, vw там, где это уместно
ограничения ширины контейнера через max-width
медиа-условия (media queries), когда нужен скачок в компоновке
современные функции вроде clamp() для плавных размеров (при желании)Пример контейнера, который ограничивает ширину и центрируется:
Пример адаптации сетки карточек под узкие экраны:
!Как сетка карточек меняется на разных ширинах
Изображения: частый источник «вылезает за экран»
Базовое правило для картинок в контенте:
Так изображение не будет вылазить за контейнер и сохранит пропорции.
Проверка адаптивности в DevTools
В Chrome DevTools используйте режим эмуляции устройств (Device Toolbar). Проверяйте не только «красиво/некрасиво», но и:
не появляется ли горизонтальный скролл
не уезжают ли интерактивные элементы за экран
не становится ли текст слишком мелкимДоступность: чтобы интерфейс был удобен не только мышкой
Доступность (accessibility) — это практика, которая делает интерфейсы пригодными для:
клавиатурной навигации
скринридеров
пользователей с низким зрением или дальтонизмом
пользователей, которым неудобны сложные анимацииВажно: доступность не является «опцией». Это качество интерфейса, как скорость загрузки или отсутствие багов.
База доступности, которую нужно знать на старте
семантическая структура документа
корректный порядок заголовков
понятные названия элементов управления
видимый фокус при навигации клавиатурой
достаточная контрастность текстаКлавиатура и фокус
Проверка, которую должен уметь делать каждый:
откройте страницу
нажимайте Tab и Shift+Tab
убедитесь, что можно добраться до всех интерактивных элементов
убедитесь, что фокус виденЕсли вы стилизуете фокус, делайте это безопасно:
Не стоит полностью отключать outline без замены: так вы «ломаете» управление с клавиатуры.
Подписи у полей формы и ошибки
У полей формы должны быть понятные подписи. Если пользователь ошибся, сообщение об ошибке должно:
объяснять, что именно не так
подсказывать, как исправить
быть заметным не только по цвету (например, ещё и текстом)Осторожно с ARIA
ARIA-атрибуты помогают, когда семантики недостаточно, но на старте безопаснее придерживаться правила:
сначала семантический элемент
потом правильная структура
и только если это невозможно — ARIAСправочник:
MDN: ARIAБыстрая проверка доступности
В Chrome можно сделать базовый аудит через Lighthouse.
откройте DevTools
вкладка Lighthouse
запустите проверку (особенно Accessibility)Документация:
Chrome DevTools: LighthouseМини-практика: как верстать аккуратно и предсказуемо
Ниже процесс, который стоит повторять на маленьких упражнениях, чтобы выработать мышечную память.
Рабочий процесс вёрстки
Напишите структурный план страницы на бумаге или в комментариях в файле.
Соберите HTML-структуру семантическими элементами.
Добавьте классы только там, где действительно нужна стилизация или переиспользование.
Подключите базовые стили: - box-sizing: border-box
- базовые шрифты
- нормальные отступы для контейнера
Постройте раскладку (Flexbox/Grid).
Пройдитесь по адаптивности через Device Toolbar.
Пройдитесь по доступности: Tab, видимость фокуса, понятность кнопок и ссылок.
Сделайте коммит в Git с осмысленным сообщением.Именование классов без боли
Можно использовать любой стиль, но новичкам удобно соблюдать три правила:
имя класса отвечает на вопрос что это за блок
имена без привязки к внешнему виду, если это возможно
единый стиль написания (например, через дефисы)Примеры нейтральных имён:
site-header, main-nav, promo, cards, card, buttonПлохой сигнал:
left-block, blue-text, big-button (такие названия ломаются при редизайне)Как использовать AI-инструменты в HTML/CSS с пользой
AI помогает ускорить рутину, но вы должны оставаться тем, кто принимает решения.
Хорошие задачи для AI на этом этапе
превратить описание страницы в семантический план
предложить структуру классов и объяснить, почему так
найти причину, почему стиль не применяется (по описанию селектора и каскада)
предложить адаптивные правила для сетки и объяснить их
подсказать, на что обратить внимание по доступности (фокус, подписи, контраст)Шаблоны запросов, которые работают
Семантика: «Опиши семантическую структуру для лендинга: шапка с меню, промо, блок преимуществ (6 карточек), отзывы, футер. Верни план в виде дерева элементов и коротко объясни выбор элементов.»
Адаптивность: «У меня сетка карточек 3 в ряд. На 900px хочу 2, на 600px — 1. Предложи CSS на Grid и объясни каждую строчку.»
Доступность: «Проверь интерфейс на базовую доступность: клавиатура, фокус, названия кнопок, контраст. Дай список конкретных правок и как их проверить в DevTools.»Что AI лучше не доверять без проверки
«магические» наборы стилей без объяснений
советы отключить outline без альтернативы
универсальные медиа-правила без привязки к вашему контентуИтоговый чек-лист перед следующей темой
У вас должно получиться:
отличать смысловую структуру от декоративной
сверстать простую страницу с header, main, footer, секциями и списками
собрать сетку на Flexbox или Grid
сделать базовую адаптацию через media queries
проверить Tab-навигацию и видимость фокуса
использовать DevTools для поиска причин «почему не так выглядит»Дальше вы начнёте добавлять интерактивность на JavaScript, и качественная HTML/CSS-база станет вашим фундаментом: JS будет «навешиваться» на понятную структуру, а не пытаться спасать хаос.