Кратко
Скопировано<header>
— это семантичный элемент, который нужен для отделения вводного содержимого или навигации от основного содержимого целой страницы или секционного блока. Например, «шапка» с навигацией для всего сайта или имя автора и дата публикации в превью статьи или новости.
Пример
СкопированоПример поста в блоге:
<article> <header> <h2>Мой самый первый блог пост</h2> <p>3 дня назад</p> </header> <p>Сегодня я начал изучать вёрстку. Это очень увлекательно.</p> <footer> <a href="?comments=1">Все комментарии</a> </footer></article>
<article> <header> <h2>Мой самый первый блог пост</h2> <p>3 дня назад</p> </header> <p>Сегодня я начал изучать вёрстку. Это очень увлекательно.</p> <footer> <a href="?comments=1">Все комментарии</a> </footer> </article>
Вот как можно использовать <header>
на странице портфолио. Он может находиться в любом месте секционного содержимого и отделять сопутствующее описание от основного контента:
<!-- Начало шапки страницы --><header> <img src="logo.svg" width="200" height="120" alt="Портфолио дизайнера Ольги" > <nav> <a href="#">Мои работы</a> <a href="#">Мои навыки</a> <a href="#">Контакты</a> </nav></header><!-- Конец шапки страницы --><main> <h1>Портфолио Ольги Сасквоч</h1> <p>Добро пожаловать!</p> <p>Рада приветствовать вас на своём сайте…</p> <ul class="portfolio-articles"> <li> <article class="card-article"> <h2 class="card-article__title">Работа номер 1</h2> <div class="portfolio-work portfolio-work_color_orange-1"></div> <p class="card-article__description"> Тут описываем какой мы сделали замечательный проект, причём в одиночку. Все эти бессонные ночи наедине с монитором и клавиатурой. </p> <header class="card-article__header"> Авторы: Ольга Сасквоч </header> </article> </li> </ul></main>
<!-- Начало шапки страницы --> <header> <img src="logo.svg" width="200" height="120" alt="Портфолио дизайнера Ольги" > <nav> <a href="#">Мои работы</a> <a href="#">Мои навыки</a> <a href="#">Контакты</a> </nav> </header> <!-- Конец шапки страницы --> <main> <h1>Портфолио Ольги Сасквоч</h1> <p>Добро пожаловать!</p> <p>Рада приветствовать вас на своём сайте…</p> <ul class="portfolio-articles"> <li> <article class="card-article"> <h2 class="card-article__title">Работа номер 1</h2> <div class="portfolio-work portfolio-work_color_orange-1"></div> <p class="card-article__description"> Тут описываем какой мы сделали замечательный проект, причём в одиночку. Все эти бессонные ночи наедине с монитором и клавиатурой. </p> <header class="card-article__header"> Авторы: Ольга Сасквоч </header> </article> </li> </ul> </main>
Как понять
СкопированоКаждый секционный элемент (<article>
, <aside>
, <nav>
, <section>
) может содержать элемент <header>
. Этот семантичный тег отделяет часть контента, которая напрямую связана с основным контентом секционного блока, но сама по себе не является основным контентом этого блока.
Классический пример — «шапка» сайта. В «шапке» может находиться навигация, лого, поисковая строка и так далее. Это содержимое страницы сайта только «обслуживает» основное, но не является основной темой страницы.
То же самое происходит в меньших масштабах — внутри любого вложенного секционного блока. Допустим, наш сайт продаёт велосипеды. На главной странице есть секция с каталогом. В начале каталога располагается меню с хлебными крошками к разным типам велосипедов. Меню лучше поместить в <header>
секции. Меню, очевидно, связано с каталогом, но это не основной контент. Основной контент — это карточки товаров в каталоге.
Ещё масштаб меньше — карточка товара <article>
. Тоже может иметь свой <header>
. В нём можно разместить любую информацию, которая будет связана с самим товаром, но не будет основной. Например, количество доступных товаров или иконка «Акция». Иконка «Акция» связана с товаром, но не основное содержимое карточки. Основной контент тут — фото и описание товара.
Важно не связывать <header>
только с «шапкой» сайта. Это семантичный тег, который отделяет основной контент секции от неосновного. В вёрстке он может располагаться в любом месте секционного блока, а не обязательно сверху. Лучше воспринимать <header>
как типографский колонтитул.
Как пишется
СкопированоТег <header>
— парный, он всегда закрывается.
<header> <h2>Моя первая свёрстанная страничка</h2> <p>3 дня назад</p></header>
<header> <h2>Моя первая свёрстанная страничка</h2> <p>3 дня назад</p> </header>
На странице может быть сколько угодно тегов <header>
. Но их нельзя помещать в контейнеры <footer>
, <address>
или другой <header>
.
Атрибуты
СкопированоМожно применить любые глобальные атрибуты.
Подсказки
Скопировано💡 У <header>
блочные стили по умолчанию 🤓
💡 <header>
может содержать заголовок, а может не содержать. Если заголовок h1
указан в <header>
, то он будет формировать семантическую раскладку Outline
страницы. Outline
— это все заголовки всех уровней в виде дерева вложенностей (как оглавление):
<!DOCTYPE HTML><html lang="ru"> <head> <title>Блог великого программиста Васи</title> </head> <body> <h1>Блог Васи</h1> <section> <header> <nav> <a href="?t=-1d">Вчера</a>; <a href="?t=-7d">Прошлая неделя</a>; <a href="?t=-1m">Прошлый месяц</a> </nav> <h2>Я прочитал всю спецификацию EcmaScript!</h2> </header> <p> Сегодня я закончил последнюю главу спецификации. Теперь я точно знаю весь JavaScript! </p> </section> </body></html>
<!DOCTYPE HTML> <html lang="ru"> <head> <title>Блог великого программиста Васи</title> </head> <body> <h1>Блог Васи</h1> <section> <header> <nav> <a href="?t=-1d">Вчера</a>; <a href="?t=-7d">Прошлая неделя</a>; <a href="?t=-1m">Прошлый месяц</a> </nav> <h2>Я прочитал всю спецификацию EcmaScript!</h2> </header> <p> Сегодня я закончил последнюю главу спецификации. Теперь я точно знаю весь JavaScript! </p> </section> </body> </html>
Поисковый робот увидит раскладку страницы так:
1. Блог Васи1. Я прочитал всю спецификацию EcmaScript!
1. Блог Васи 1. Я прочитал всю спецификацию EcmaScript!
Верхний уровень — «Блог Васи», следующий по вложенности — «Я прочитал всю спецификацию EcmaScript!».
💡 Как структурируется содержимое страницы удобно проверять в валидаторе HTML от W3C.
💡 Семантический вес для скринридеров тег <header>
имеет только в случае, если он напрямую вложен в тег <body>
. То есть когда выступает в роли обчной «шапки» страницы. В этом случае у <header>
будет ARIA-роль banner
. Благодаря этой роли пользователи скринридеров могут быстро перемещаться к этой области с помощью специальных клавиш. Во всех остальных случаях <header>
не будет иметь семантического значения для скринридеров.
На практике
Скопированосоветует Скопировано
🛠 Если придерживаться принципа, при котором в проекте каждый блок находится в отдельном файле, шапку можно реализовать один раз и вставлять уже готовый элемент на все страницы.