Меню, шапка и подвал сайта: как сверстать базовый каркас проекта

Базовый каркас сайта — это три опорных блока: шапка, меню и подвал. Без них даже хороший контент выглядит незавершённым, а пользователь тратит лишние секунды на ориентацию. Когда я только начинал работать с сайтами — ещё на этапе регистрации доменов и настройки DNS — первым делом после привязки хостинга создавал именно эту структуру. Она сразу превращает пустой index.html в нечто похожее на проект, а не на набор разрозненных блоков.

Если вы только осваиваете вёрстку, соберите сначала каркас. Он пригодится и для лендинга, и для блога, и для корпоративного сайта. Дальше будет проще добавлять адаптивность, формы и скрипты.

Что такое каркас сайта и зачем он нужен

Каркас — это повторяющиеся элементы, которые присутствуют на большинстве страниц:

  • шапка с логотипом, навигацией и контактами;
  • меню или навигация по разделам;
  • основной контент страницы;
  • подвал с дополнительной информацией, ссылками и служебными данными.

Такой подход экономит время и упрощает поддержку. Пользователь быстрее понимает, где он находится и как перейти в нужный раздел. Для вас как верстальщика это ещё и основа для дальнейшей адаптивности: если каркас сделан аккуратно, масштабировать сайт под мобильные устройства намного проще. Я не раз убеждался: потратив час на продуманную структуру, вы сэкономите несколько часов при доработке.

Из каких блоков обычно состоит шапка, меню и подвал

Набор элементов зависит от типа сайта, но в большинстве случаев логика одинаковая. Вот что я обычно закладываю в начале проекта:

Блок Что обычно содержит Зачем нужен
Шапка логотип, название, меню, телефон, кнопка действия помогает сразу понять, куда попал пользователь
Меню ссылки на разделы сайта даёт быстрый переход между страницами
Подвал контакты, копирайт, допссылки, соцсети, политика закрывает служебные и навигационные задачи

Для небольшого сайта достаточно минимального набора. Для интернет-магазина или портала блоки будут шире: в шапке может появиться поиск, корзина, вход в личный кабинет, а в подвале — карта сайта и юридические ссылки. Но начинать всегда лучше с простого: логотип, меню, кнопка, контакты внизу.

Какой HTML использовать для базовой структуры

Для каркаса лучше применять семантические теги. Семантика означает, что элемент не просто выглядит как блок, а ещё и показывает браузеру и поисковым системам, что это за часть страницы. Это важно не только для SEO, но и для доступности: скринридеры объявляют роли элементов, и пользователь с ослабленным зрением быстрее ориентируется.

Основные теги, которые я использую в каждом проекте:

  • <header> — шапка;
  • <nav> — навигация;
  • <main> — основной контент;
  • <footer> — подвал;
  • <section> — смысловой раздел;
  • <div> — универсальная обёртка, если семантический тег не подходит.

Пример минимальной структуры, с которой я часто стартую:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Название сайта</title>
</head>
<body>
  <header>
    <!-- логотип и меню -->
  </header>
  <nav>
    <!-- основное меню -->
  </nav>
  <main>
    <!-- контент страницы -->
  </main>
  <footer>
    <!-- подвал -->
  </footer>
</body>
</html>

Такой скелет сразу даёт понятную структуру и позволяет не запутаться, когда начнёте добавлять стили.

Пошагово: как сверстать шапку сайта

1. Сначала продумайте состав элементов

Перед вёрсткой я всегда отвечаю на три вопроса:

  • что должно быть в шапке;
  • что пользователь должен увидеть первым;
  • какое действие для вас главное: звонок, заявка, переход в каталог или вход в аккаунт.

Для простого сайта шапка может включать только логотип, меню и кнопку. Не перегружайте её лишними деталями: чем проще шапка, тем быстрее она работает и тем удобнее выглядит на мобильном устройстве. По своему опыту скажу: когда я пытался запихнуть в шапку телефон, адрес, поиск и три кнопки, пользователи просто терялись. Сейчас я оставляю только критически важное.

2. Используйте контейнер и flex

Обычно шапку удобно строить на flex. Он позволяет выстроить элементы в одну линию и легко управлять расстоянием между ними. Я почти всегда добавляю внешний контейнер, чтобы ограничить ширину и отцентрировать содержимое.

<header class="header">
  <div class="container header__inner">
    <a href="/" class="logo">Мой сайт</a>
    <nav class="menu">
      <ul>
        <li><a href="/about">О нас</a></li>
        <li><a href="/services">Услуги</a></li>
        <li><a href="/contacts">Контакты</a></li>
      </ul>
    </nav>
    <a href="#" class="btn">Заказать</a>
  </div>
</header>

В CSS для .header__inner я задаю display: flex; justify-content: space-between; align-items: center;. Это автоматически разносит логотип, меню и кнопку по краям и выравнивает по вертикали. Контейнер ограничивает максимальную ширину, например, 1200px, и центрирует через margin: 0 auto;.

3. Сделайте логотип и меню понятными

Логотип лучше оформлять как ссылку на главную страницу. Это стандартное и привычное поведение для пользователя. Я всегда добавляю aria-label на случай, если логотип — картинка без текста, чтобы скринридеры могли его озвучить.

Меню — это список ссылок. Даже если визуально оно выглядит как горизонтальная строка, в HTML лучше использовать именно список <ul>. Так код остаётся понятным и доступным: скринридер объявит «список из трёх пунктов» и пользователь сможет быстро перемещаться по ним.

<nav aria-label="Основное меню">
  <ul class="menu-list">
    <li><a href="/">Главная</a></li>
    <li><a href="/blog">Блог</a></li>
    <li><a href="/contacts">Контакты</a></li>
  </ul>
</nav>

В стилях я убираю маркеры списка через list-style: none; и выстраиваю пункты в строку с помощью display: flex; gap: 20px;.

4. Добавьте кнопку действия

Если сайт коммерческий, в шапке почти всегда нужна заметная кнопка: «Заказать», «Оставить заявку», «Связаться». Она должна отличаться от обычных ссылок цветом, размером или рамкой. Я обычно задаю ей класс .btn с ярким фоном, внутренними отступами и скруглением. Главное — не переборщить с количеством кнопок: одна, максимум две. Иначе внимание рассеивается.

Как сверстать меню сайта без лишней сложности

Меню — это не просто список ссылок. Это навигационная карта сайта. Если структура меню продумана плохо, пользователь быстро теряется. Я всегда начинаю с вопроса: «Какие три-четыре раздела самые важные для посетителя?»

Базовые правила хорошего меню

  • не делайте слишком много пунктов — семи-восьми уже многовато для основного меню;
  • называйте разделы коротко и понятно — «Услуги» лучше, чем «Что мы предлагаем»;
  • размещайте самые важные ссылки ближе к началу — слева направо приоритет убывает;
  • не прячьте ключевые разделы глубоко в подменю без крайней необходимости.

Типичный вариант меню для небольшого сайта

  • Главная
  • О нас
  • Услуги
  • Портфолио
  • Контакты

Для блога логика будет другой, и я часто использую такую структуру:

  • Статьи
  • Руководства
  • Категории
  • Об авторе
  • Контакты

Что важно в мобильной версии

На смартфонах горизонтальное меню часто не помещается. В этом случае обычно используют бургер-кнопку, которая открывает список ссылок. Когда я только начинал, делал бургер на чистом CSS через скрытый чекбокс — это работает, но сейчас предпочитаю небольшой JavaScript для управления классом .active. Так проще контролировать анимацию и поведение при клике вне меню.

Если вы новичок, начните с простого решения: на десктопе меню видно сразу, на мобильном — скрывается и открывается по нажатию. Даже такая реализация уже делает сайт гораздо удобнее. Главное — не забудьте про медиа-запросы и метатег viewport.

Как сделать подвал сайта полезным, а не формальным

Подвал часто недооценивают, хотя это один из самых полезных блоков страницы. Пользователь нередко ищет контакты именно там, особенно если не хочет скроллить наверх. Я всегда стараюсь сделать футер информативным, но не перегруженным.

Что стоит разместить в подвале

  • название компании или сайта;
  • контакты (телефон, email, адрес);
  • ссылку на политику конфиденциальности;
  • дополнительные разделы (например, «Доставка» или «FAQ»);
  • иконки соцсетей;
  • копирайт;
  • юридическую информацию, если она нужна.

Для информационного сайта в подвале можно добавить навигацию по категориям, форму подписки, ссылки на популярные статьи или краткое описание проекта. Я часто дублирую там основное меню — это помогает, когда пользователь дочитал страницу до конца и хочет перейти в другой раздел, не возвращаясь в шапку.

Пример структуры footer

<footer class="footer">
  <div class="container footer__grid">
    <div class="footer__col">
      <h4>О проекте</h4>
      <p>Краткое описание сайта или компании.</p>
    </div>
    <div class="footer__col">
      <h4>Разделы</h4>
      <ul>
        <li><a href="/blog">Блог</a></li>
        <li><a href="/services">Услуги</a></li>
        <li><a href="/contacts">Контакты</a></li>
      </ul>
    </div>
    <div class="footer__col">
      <h4>Контакты</h4>
      <p>[email protected]</p>
      <p>+7 (999) 123-45-67</p>
    </div>
  </div>
  <div class="footer__bottom">
    <p>© 2025 Мой сайт. Все права защищены.</p>
  </div>
</footer>

Такая сетка из трёх колонок (на десктопе) легко делается через display: flex или grid. На мобильных колонки просто переносятся одна под другую.

Частые ошибки при верстке каркаса

Даже простая структура может выглядеть плохо, если допустить типичные ошибки. Вот что я встречал чаще всего и как это исправлял:

Ошибка Чем она мешает Как исправить
Слишком много элементов в шапке перегружает первый экран, пользователь не может быстро найти главное оставить только логотип, меню и одну кнопку действия; остальное убрать в подвал или на отдельную страницу
Меню без списка (просто набор ссылок в div) ухудшает семантику и доступность, скринридеры не объявляют структуру использовать <ul> и <li>, даже если визуально это строка
Подвал без полезной информации блок выглядит пустым и бесполезным, пользователь уходит, не найдя контактов добавить контакты, дублирующие ссылки, копирайт
Нет адаптивности сайт ломается на мобильных: меню уезжает, текст налезает проверить шапку, меню и footer на разных ширинах, добавить медиа-запросы и гибкие контейнеры
Слабый визуальный контраст текст плохо читается, особенно на мобильных при ярком солнце увеличить контраст между фоном и текстом, добавить достаточные отступы

Ещё одна частая проблема — попытка сделать всё сразу слишком сложным. Новички нередко добавляют в шапку десятки элементов, хотя для первого сайта достаточно логотипа, меню и кнопки. Я сам через это прошёл: навороченная шапка с поиском, выпадающим меню и иконками только усложняла вёрстку и отвлекала от сути. Лучше начать с простого и добавлять функциональность по мере необходимости.

Минимальный набор CSS для аккуратного каркаса

Чтобы шапка, меню и подвал выглядели собранно, важны три вещи: отступы, выравнивание и типографика. Вот база, которую я обычно подключаю в начале проекта:

/* Сброс отступов и box-sizing */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  font-family: system-ui, -apple-system, sans-serif;
  line-height: 1.5;
  color: #333;
}

.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 15px;
}

.header {
  padding: 20px 0;
  background: #fff;
  border-bottom: 1px solid #eee;
}

.header__inner {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.logo {
  font-size: 1.5rem;
  font-weight: bold;
  text-decoration: none;
  color: inherit;
}

.menu-list {
  display: flex;
  gap: 20px;
  list-style: none;
}

.menu-list a {
  text-decoration: none;
  color: #333;
}

.menu-list a:hover {
  color: #007bff;
}

.btn {
  display: inline-block;
  padding: 10px 20px;
  background: #007bff;
  color: #fff;
  text-decoration: none;
  border-radius: 5px;
}

.footer {
  background: #f5f5f5;
  padding: 40px 0 20px;
  margin-top: 40px;
}

.footer__grid {
  display: flex;
  flex-wrap: wrap;
  gap: 30px;
  justify-content: space-between;
}

.footer__bottom {
  text-align: center;
  margin-top: 30px;
  font-size: 0.9rem;
  color: #666;
}

Если хотите сделать базу более аккуратной, добавьте единый container для всех секций, одинаковые внутренние отступы и понятные состояния :hover для ссылок. Это сразу придаёт проекту законченный вид, даже без сложного дизайна.

Как проверить, что каркас сайта собран правильно

Перед тем как переходить к наполнению, я всегда провожу быструю проверку по чек-листу. Это помогает отловить глупые ошибки на раннем этапе.

Чек-лист проверки

  • шапка не занимает слишком много места (по высоте не более 100–120px на десктопе);
  • логотип ведёт на главную;
  • меню открывается и на десктопе, и на мобильном (пункты кликабельны, нет перекрытий);
  • ссылки читаются и не сливаются с фоном;
  • подвал содержит полезные данные: контакты, ссылки, копирайт;
  • структура HTML семантична (использованы <header>, <nav>, <main>, <footer>);
  • блоки не «прыгают» при загрузке (нет резких сдвигов из-за подгрузки шрифтов или изображений);
  • нет лишних обёрток без смысла — каждый <div> должен что-то решать;
  • сайт нормально выглядит на телефоне и планшете (проверяю не только в инструментах разработчика, но и на реальном устройстве).

Быстрый тест на практике

Откройте страницу и попробуйте пройти путь обычного пользователя:

  • понять, что это за сайт (по логотипу и заголовку в шапке);
  • найти нужный раздел через меню;
  • связаться с владельцем (кнопка или контакты в подвале);
  • вернуться на главную (клик по логотипу);
  • понять, где заканчивается контент и начинается служебная часть (подвал явно отделён).

Если этот путь проходится без затруднений, каркас работает хорошо. Я часто прошу кого-нибудь из знакомых «пощёлкать» свежий прототип — свежий взгляд сразу выявляет неочевидные проблемы.

Когда пора усложнять структуру

Базовый каркас подходит не для всех случаев. Если сайт растёт, появляются новые задачи: многоуровневое меню, закреплённая шапка, отдельная навигация по разделам, расширенный подвал с колонками, поиск по сайту, личный кабинет, корзина и избранное. Я обычно добавляю такие элементы постепенно, когда без них уже не обойтись.

Например, закреплённую шапку (position: sticky; top: 0;) имеет смысл делать, когда страницы становятся длинными и пользователю нужно постоянно иметь доступ к меню. А выпадающее подменю — когда разделов больше семи и их нужно логически сгруппировать. Но начинать всегда лучше с чистой и устойчивой базы: слишком сложная первая версия сайта часто становится источником ошибок и путаницы. Я не раз переделывал чужие проекты, где уже на старте было накручено столько, что проще было пересобрать каркас с нуля.

FAQ

Нужно ли всегда использовать <header>, <nav> и <footer>?

Да, если эти блоки действительно есть на странице. Семантические теги упрощают структуру и делают код понятнее и для разработчика, и для поисковых систем. Я стараюсь применять их всегда, даже в небольших проектах — привычка вырабатывается быстро и потом экономит время при поддержке.

Можно ли сделать меню без JavaScript?

Да. Для простого статичного сайта часто хватает HTML и CSS. Например, бургер-меню можно реализовать через скрытый чекбокс и селектор :checked. JavaScript нужен, когда требуется более плавная анимация, закрытие по клику вне меню или сложная логика. Я обычно начинаю с CSS-решения, а если появляются требования к UX — добавляю небольшой скрипт.

Обязательно ли добавлять подвал?

Практически да. Даже минимальный footer помогает разместить контакты, копирайт и служебные ссылки. Пользователи привыкли искать там дополнительную информацию, и отсутствие подвала может создать впечатление незавершённости. Я всегда добавляю хотя бы строчку с копирайтом и ссылку на политику конфиденциальности.

Что важнее в шапке: красота или удобство?

Сначала удобство. Если пользователь быстро понимает, куда нажать и как перейти дальше, шапка выполнена правильно. Красоту можно навести потом, но если навигация неочевидна, никакой дизайн не спасёт. Я часто проверяю это простым тестом: даю человеку макет и прошу найти «Контакты» — если он делает это за секунду, всё хорошо.

Подходит ли этот каркас для одностраничного сайта?

Да. Для лендинга шапка, меню и подвал тоже нужны, просто меню часто ведёт не на другие страницы, а на якоря внутри страницы. Я делал десятки одностраничников, и базовая структура с семантическими тегами там работает отлично. Просто вместо ссылок на другие URL используются якоря типа #about, #services.

Хорошо свёрстанные шапка, меню и подвал создают основу всего сайта: они делают страницу понятной, удобной и готовой к развитию. Если вы начинаете с чистого HTML и аккуратного CSS, дальше будет проще добавить адаптивность, формы, скрипты и полноценную логику проекта. Именно так я когда-то перешёл от регистрации доменов к полноценной веб-разработке — с простого, но крепкого каркаса.