Menu

Header no HTML: a tag header, exemplos e cabeçalho fixo

O elemento <header> guarda a introdução de uma página ou de uma seção: um logo, um título, a navegação, a autoria. Veja como montar o cabeçalho de um site, como <header> difere de <head> e dos títulos, como usá-lo dentro de artigos e como deixá-lo fixo.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Como fazer um cabeçalho no HTML

Envolva o topo da sua página (logo, nome do site, menu principal) num elemento <header>. É uma caixa block sem aparência padrão, então algumas linhas de CSS a transformam numa barra:

margin-inline-end: auto no logo empurra o menu e o botão para a outra ponta da barra. Remova o elemento <style> e você ainda tem um cabeçalho: é a tag que o torna um, não o fundo escuro.

header vs head vs h1

Três nomes parecidos que fazem trabalhos diferentes:

ElementoOndeVisívelQuantos
<head>Direto dentro de <html>, antes de <body>Não: guarda <title>, <meta>, <link>Exatamente um
<header>Dentro de <body>Sim: conteúdo introdutório de uma página ou seçãoQuantos quiser
<h1> a <h6>Em qualquer lugar de <body>Sim: um títuloQuantos quiser

O <head> abaixo define o título da página que o navegador mostra na aba. Tudo o que você vê na prévia vem de <body>:

Um header muitas vezes contém um título, mas não é obrigatório, e um título não precisa de um header em volta.

Headers dentro de artigos

<header> introduz o article ou section mais próximo, não só a página. Uma lista de posts de blog em que cada post tem o seu próprio header é válida e comum:

Para os leitores de tela, só o header do nível da página (um que não está dentro de article, aside, main, nav ou section) vira o landmark banner. Os headers dos artigos são grupos comuns, então você não acaba com vários banners.

Cabeçalho fixo

position: sticky mantém o header no topo enquanto o conteúdo embaixo dele rola. Role dentro da caixa abaixo:

Três detalhes fazem funcionar: top: 0 (sticky não faz nada sem um deslocamento), uma cor de fundo (senão as linhas aparecem através dele) e z-index para que o conteúdo posicionado não seja pintado por cima dele. Numa página real, a caixa que rola é a própria página, então o header fica direto no <body>.

Um header com position: fixed também fica parado, mas sai do fluxo da página, então o conteúdo desliza por baixo dele e precisa de padding no topo. O sticky mantém o seu espaço no layout.

O que pode ir num header

Um header pode conter quase qualquer conteúdo: títulos, uma imagem de logo, um <nav>, um formulário de busca, um botão. Ele não pode conter outro <header> nem um <footer>, e não pode ficar dentro de um <footer>, de um <address> ou de outro <header>.

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

Quando o logo é um link para a página inicial, o seu texto alt deve dizer para onde o link vai ("Acme home"), porque é isso que o leitor de tela anuncia.

Erros comuns

  • Confundir <header> com <head>. Metadados vão no <head>; conteúdo visível nunca vai.
  • Usar <header> em todo título. Um título sozinho não precisa de um header em volta. Use <header> quando há um grupo de conteúdo introdutório.
  • Um cabeçalho fixo sem fundo. O texto da página aparece rolando através dele. Defina um background.
  • Sticky que não fica preso. Um ancestral com overflow: hidden ou overflow: auto vira a caixa de rolagem do sticky, então o header fica preso dentro dessa caixa (ou não fica preso). Verifique os ancestrais.
  • Colocar o menu do site numa <div> dentro do header. Use <nav> para que quem usa leitor de tela possa pular até ele.

Perguntas frequentes

O que é a tag header no HTML?

<header> é um elemento semântico para conteúdo introdutório: o logo e o menu do site no topo da página, ou o título e a autoria no topo de um artigo. É uma caixa block normal, sem estilo padrão.

Qual a diferença entre head e header no HTML?

<head> é a parte invisível do documento, com o <title>, as tags <meta> e os links de folhas de estilo, e existe exatamente um. <header> é conteúdo visível dentro do <body>, e uma página pode ter vários.

Uma página pode ter mais de um elemento header?

Sim. Uma página normalmente tem um cabeçalho do site, e cada <article> ou <section> pode ter o seu próprio <header> para o título e as informações. Só um header que não está dentro de article, aside, main, nav ou section conta como o banner da página para os leitores de tela.

O nav deve ficar dentro do header?

Pode ficar, e muitas vezes fica quando o menu principal está no topo da página. Colocar <nav> fora de <header> também é válido; escolha o que combina com o seu layout.

Como fazer o header ficar no topo ao rolar a página?

Dê a ele position: sticky; top: 0; mais uma cor de fundo e um z-index, para que o conteúdo role por baixo. O sticky só funciona enquanto o pai do header for mais alto que ele, e um ancestral com overflow: hidden impede que ele fique preso à página.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR