Что такое header в HTML
Не путать с head! Знакомимся с тегом и учимся верстать шапку сайта.
Иллюстрация: Катя Павловская для Skillbox Media
Верхняя часть многих сайтов состоит из логотипа, меню, строки поиска и других подобных элементов. Обычно эти элементы собраны в один блок, который называется шапкой сайта. Чтобы сделать шапку сайта нужен HTML-тег <header>.
Тег <header> появился в HTML5 — это современная версия языка гипертекстовой разметки. До этого шапку сайта верстали с помощью тега <div>. Сейчас такая практика устарела, и из статьи вы узнаете почему. Мы познакомимся с хедером и сверстаем две шапки сайта для закрепления теории. Исходники для вёрстки сможете найти ниже. Можете их скачать и попрактиковаться с нами.
Содержание
Пример реализации
Шапку сайта можно оформить по-разному. Её вид будет зависеть от элементов, которые разработчик добавит внутрь парного тега <header>. Какие конкретно это будут элементы — зависит от индивидуальных предпочтений разработчика.
Представьте макет первого экрана сайта: сверху располагается логотип, под ним меню, ещё ниже — фоновое изображение с небольшим текстовым блоком. Один разработчик добавит в шапку только логотип. Другой — логотип и меню. Третий — весь первый экран. Все варианты допустимы и нет какого-то более правильного. Поэтому разработчики верстают шапки сайтов, опираясь на опыт и детали макета.
Пример шапки сайта с логотипом и меню:
Тег <header> не нужно путать с созвучным тегом <head>. Тег <header> создаёт шапку сайта и находится внутри тега <body>. Тег <body> отвечает за видимую часть страницы — то есть содержит весь HTML-код, который отобразит браузер.
Тег <head> стоит перед <body>. Он содержит служебную информацию, которая помогает отображать страницу в браузере. Пользователи такой код не видят.
Пример страницы с тегами <head> и <header>:
Обычно тег <header> ассоциируется с шапкой сайта. Однако его можно использовать в качестве шапки для отдельных страниц или частей страницы.
Возьмём страницу с каталогом, которая находится под шапкой сайта. Каталог состоит из карточек товаров и панели управления. В панель управления входит меню, поисковая строка и фильтры для подбора товаров. Так вот содержимое панели управления можно добавить в тег <header> и сделать шапкой страницы.
На странице может находиться множество хедеров. Однако для сохранения структуры документа их не стоит вкладывать в <footer>, <address> и другой тег <header>. Иначе страница может непредсказуемо отображаться в браузерах.
Пример страницы с шапкой сайта и шапкой каталога:
Заменим каталог товаров на блог. У каждой записи будет заголовок, подзаголовок и содержимое. Заголовок и подзаголовок можно объединить в теге <header> и использовать как шапку для части страницы — то есть для всех записей в блоге.
Пример страницы с шапкой сайта и тремя шапками для записей в блоге:
Предназначение тега
HTML-теги делятся на блочные и строчные. Тег <header> относится к блочным тегам и появился в HTML5. Ранее шапку верстали с помощью блочного тега <div>.
Если взять любой HTML-документ и заменить <header> на <div>, то с вёрсткой ничего не случится. Сайт будет корректно отображаться во всех браузерах. Дело в том, что <div> и <header> выполняют схожую функцию — создают обёртку для упорядочивания других тегов. Они как шкаф с полочками для хранения вещей.
В современной вёрстке <header> не заменяют на <div>. Причина в стандарте HTML5, который ввёл концепцию семантической разметки. Теги должны не просто формировать структуру страницы, но и передавать смысл содержимого: описывать значения основных блоков и уточнять суть определённых элементов.
Семантика превратила <div> в <header>. Появились и другие семантические теги, которые ранее были обёрнуты в <div>. Например, с помощью тега <nav> можно создать навигационное меню, а в <footer> добавить контент для нижней части сайта. По одному названию таких тегов понятно, какой код в них содержится.
Семантическая разметка стимулирует разработчиков писать структурированный код, который легко читать и поддерживать. Также она помогает поисковым роботам и людям с ограниченными возможностями ориентироваться на сайте.
Поисковые роботы не умеют визуально анализировать страницы сайтов, поэтому без семантической разметки им сложно определять расположение элементов. И наоборот: разметка позволяет быстро сканировать страницы, считывать структуру и оценивать содержимое. Так сайты лучше видны поисковым системам.
Люди с ограниченным зрением изучают сайты через скринридеры — устройства или приложения, которые голосом воспроизводят контент и элементы страницы.
Скринридеры помогают прослушивать навигацию сайта, быстро перемещаться между блоками и находить информацию. Семантическая разметка как раз способствует тому, чтобы голосовые программы могли корректно отличать шапку сайта от основного содержимого и других элементов на странице. Это часть концепции цифровой доступности, которую поддерживает команда Chrome.
👉 Руководство по доступности сайтов от членов команды Chrome
Атрибуты
Для тега <header> нет специальных атрибутов, но к нему можно применить глобальные атрибуты — общие для всех HTML-элементов. Например, с помощью глобального атрибута "title" можно любому тегу добавить всплывающую подсказку.
Из всех глобальных атрибутов к тегу <header> чаще всего применяют атрибут "class". В нём пишут имя, по которому можно обратиться к тегу в таблице стилей.
Добавим на страницу три шапки для записей в блоге. Присвоим каждой класс с именем и через таблицу стилей изменим цвет фона. Сделаем фон первой шапки красным, фон второй — жёлтым, а фон третьей — зелёным.
Тегам можно присваивать любые имена классов — HTML-спецификация позволяет. Однако есть рекомендация: давать имена классам по названию семантических элементов. Если элемент <header>, то и класс желательно называть "header". Есть даже сайты со списками слов, которыми часто называют классы. Например, Common words.
Общепринятые названия имён классов делают код понятным и единообразным. Для наглядности зададим классу произвольное имя, например "top-of-page-content". Альтернатива: "header". Понятное имя, которое не нужно расшифровывать.
При совместной разработке не всегда получается давать классам общепринятые имена. Нужны специфические названия, которые предотвращают конфликт имён между частями проекта. Для этого созданы разные методологии, например БЭМ от компании «Яндекс». Вёрстка по БЭМ предполагает добавление имён ко всем тегам. Если на странице несколько тегов <header>, то каждому необходим class.
Имена классов должны соответствовать набору правил, которые сейчас мы рассматривать не будем. Подробно про БЭМ у нас есть отдельная статья. Однако суть подхода в том, чтобы раздробить код на самодостаточные блоки с понятными названиями. В следующем разделе мы попрактикуемся и углубимся в объяснение.
Как сделать шапку сайта
Вы уже знаете, что каждый разработчик на своё усмотрение выбирает элементы для шапки сайта. На процесс вёрстки это не влияет. Однако могут появиться вложенные блоки, которые вместе с БЭМ-неймингом иногда путают новичков.
Мы сверстаем две шапки сайта и разберёмся, какой блок зачем нужен. В первой шапке будет логотип и меню. Во второй — меню и фоновое изображение с коротким текстом. Если захотите попрактиковаться — можете скачать исходники или на своё усмотрение подобрать макет. Для подбора рекомендует freepik.com.
Первый кейс: шапка сайта с логотипом и меню
В этом разделе: план вёрстки, схема и код с комментариями.
План вёрстки:
- Создаём тег <header>. В нём будет находиться всё содержимое нашей шапки.
- В тег <header> вкладываем тег <div> с классом "container". Этот блок нужен для ограничения ширины контента на странице — чтобы на широкоформатных мониторах сайт не растягивался. Контейнер относится к переиспользуемым блокам, которые применяют к разным разделам страницы. Поэтому он отвечает только за два свойства: за ширину и центрирование контента.
- В контейнер вкладываем внутреннюю обёртку. В коде это будет тег <div> с классом "header__inner". Запись через нижнее подчёркивание — это нейминг по БЭМ. Так мы указываем, что обёртка является элементом блока <header>. К внутренней обёртке мы применим технологию Flexbox и сможем управлять расположением вложенных элементов.
- Помещаем логотип и меню во внутреннюю обёртку. В нашем кейсе это самодостаточные блоки, которые можно переиспользовать на странице.
Второй кейс: шапка сайта с меню, фоновым изображением и текстом
В этом кейсе шапка сайта занимает весь первый экран. Нам предстоит не просто упорядочить блоки внутри такого объёмного хедера, но и предусмотреть ситуацию, чтобы вёрстка не сломалась в случае добавления нового контента.
Начнём с плана:
- Создаём <header>.
- Делим <header> на две зоны: верхнюю с меню и нижнюю с контентом. Верхнюю зону называем "<header__top>", а нижнюю
— "<header__content>". - Верстаем "<header__top>".
- Создаём контейнер.
- В контейнере создаём внутреннюю обёртку — тег <div> с классом "header__top-inner". В макете с одним меню эта обёртка нам не понадобится. Однако если вы заходите добавить в верхнюю зону логотип или другой элемент, то к этой обёртке можно будет применить Flexbox.
- Добавляем во внутреннюю обёртку меню.
- Верстаем "<header__content>".
- Создаём контейнер.
- В контейнере создаём внутреннюю обёртку. В коде это <div> с классом "header__content-inner". К обёртке мы применим технологию Flexbox.
- Вкладываем во внутреннюю обёртку заголовок и иконку.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!