Menu

Тег header в HTML: примеры и закрепленная шапка сайта

Элемент <header> содержит вступление страницы или раздела: логотип, заголовок, навигацию, подпись автора. Разберем, как сделать шапку сайта, чем <header> отличается от <head> и заголовков, как использовать его внутри статей и как закрепить его при прокрутке.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как сделать шапку сайта в HTML

Оберните верх страницы (логотип, название сайта, главное меню) в элемент <header>. Это блок без стилей по умолчанию, поэтому несколько строк CSS превращают его в панель:

margin-inline-end: auto у логотипа отталкивает меню и кнопку в дальний конец панели. Удалите элемент <style>, и шапка все равно останется шапкой: ее делает такой тег, а не темный фон.

header, head и h1

Три похожих названия, которые делают разную работу:

ЭлементГдеВиденСколько
<head>Прямо внутри <html>, перед <body>Нет: содержит <title>, <meta>, <link>Ровно один
<header>Внутри <body>Да: вступительное содержимое страницы или разделаСколько угодно
<h1>...<h6>Где угодно в <body>Да: заголовокСколько угодно

<head> ниже задает заголовок страницы, который браузер показывает на вкладке. Все, что видно в превью, берется из <body>:

Шапка часто содержит заголовок, но не обязана, а заголовку не нужна обертка header.

Шапки внутри статей

<header> открывает ближайшую статью или раздел, а не только страницу. Список записей блога, где у каждой записи своя шапка, корректен и распространен:

Для программ чтения с экрана ориентиром banner становится только шапка уровня страницы (та, что не находится внутри article, aside, main, nav или section). Шапки статей это обычные группы, поэтому несколько banner на странице не появится.

Закрепленная шапка

position: sticky держит шапку вверху, пока содержимое под ней прокручивается. Прокрутите блок ниже:

Работу обеспечивают три детали: top: 0 (без смещения sticky ничего не делает), цвет фона (иначе сквозь шапку видны строки) и z-index, чтобы позиционированное содержимое не рисовалось поверх нее. На настоящей странице прокручивается сама страница, поэтому шапка стоит прямо в <body>.

Шапка с position: fixed тоже остается на месте, но выпадает из потока страницы, поэтому содержимое заезжает под нее, и ему нужен отступ сверху. Sticky сохраняет свое место в раскладке.

Что можно положить в header

Шапка может содержать почти любое содержимое: заголовки, картинку логотипа, <nav>, форму поиска, кнопку. Она не может содержать другой <header> или <footer> и не может находиться внутри <footer>, <address> или другого <header>.

<header>
  <a href="/"><img src="logo.svg" alt="Acme home"></a>
  <nav aria-label="Main">...</nav>
  <form role="search">...</form>
</header>

Когда логотип это ссылка на главную страницу, его текст alt должен говорить, куда ведет ссылка («Acme home»), потому что именно его объявляет программа чтения с экрана.

Частые ошибки

  • Путаница между <header> и <head>. Метаданные идут в <head>; видимое содержимое туда никогда не попадает.
  • <header> для каждого заголовка. Одному заголовку обертка не нужна. Используйте <header>, когда есть группа вступительного содержимого.
  • Закрепленная шапка без фона. Текст страницы заметно прокручивается сквозь нее. Задайте background.
  • Sticky, который не закрепляется. Предок с overflow: hidden или overflow: auto становится для sticky прокручиваемым блоком, поэтому шапка закрепляется внутри этого блока (или не закрепляется вовсе). Проверьте предков.
  • Меню сайта в <div> внутри шапки. Используйте <nav>, чтобы пользователи программ чтения с экрана могли к нему переходить.

Часто задаваемые вопросы

Что такое тег header в HTML?

<header> это семантический элемент для вступительного содержимого: логотип и меню сайта вверху страницы или заголовок и подпись автора в начале статьи. Это обычный блок без стилей по умолчанию.

Чем head отличается от header в HTML?

<head> это невидимая часть документа с <title>, тегами <meta> и ссылками на стили, и он ровно один. <header> это видимое содержимое внутри <body>, и на странице их может быть несколько.

Может ли на странице быть несколько элементов header?

Да. Обычно у страницы одна шапка сайта, а у каждого <article> или <section> может быть собственный <header> для заголовка и метаданных. Ориентиром banner для программ чтения с экрана считается только header, который не находится внутри article, aside, main, nav или section.

Нужно ли класть nav внутрь header?

Можно, и так часто делают, когда главное меню стоит вверху страницы. Поместить <nav> вне <header> тоже корректно; выбирайте то, что подходит вашей раскладке.

Как закрепить шапку вверху при прокрутке?

Задайте ей position: sticky; top: 0;, цвет фона и z-index, чтобы содержимое прокручивалось под ней. Sticky работает, только пока родитель шапки выше самой шапки, а предок с overflow: hidden не дает ей закрепиться относительно страницы.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ