Menu

Header en HTML: la etiqueta header, ejemplos y cabecera fija

El elemento <header> contiene la introducción de una página o de una sección: un logo, un título, la navegación, la autoría. Aprende a construir la cabecera de un sitio, en qué se diferencia <header> de <head> y de los encabezados, cómo usarlo dentro de artículos y cómo hacerlo fijo.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Cómo hacer un header en HTML

Envuelve la parte superior de tu página (logo, nombre del sitio, menú principal) en un elemento <header>. Es una caja de bloque sin aspecto por defecto, así que unas pocas líneas de CSS la convierten en una barra:

margin-inline-end: auto en el logo empuja el menú y el botón al otro extremo de la barra. Quita el elemento <style> y sigues teniendo un header: lo que lo convierte en uno es la etiqueta, no el fondo oscuro.

header vs head vs h1

Tres nombres que suenan parecido y hacen trabajos distintos:

ElementoDóndeVisibleCuántos
<head>Directamente dentro de <html>, antes de <body>No: contiene <title>, <meta>, <link>Exactamente uno
<header>Dentro de <body>Sí: contenido introductorio de una página o secciónCualquier número
De <h1> a <h6>En cualquier parte de <body>Sí: un encabezadoCualquier número

El <head> de abajo fija el título de la página que el navegador muestra en su pestaña. Todo lo que ves en la vista previa viene de <body>:

Un header a menudo contiene un encabezado, pero no tiene por qué, y un encabezado no necesita un header alrededor.

Headers dentro de artículos

<header> introduce su article o section más cercano, no solo la página. Una lista de entradas de blog en la que cada entrada tiene su propio header es válida y habitual:

Para los lectores de pantalla, solo el header de nivel de página (uno que no está dentro de article, aside, main, nav o section) se convierte en el landmark banner. Los headers de los artículos son grupos normales, así que no acabas con varios banners.

Header fijo (sticky)

position: sticky mantiene el header arriba mientras el contenido de debajo se desplaza. Desplázate dentro de la caja de abajo:

Tres detalles lo hacen funcionar: top: 0 (sticky no hace nada sin un desplazamiento), un color de fondo (si no, las filas se ven a través) y z-index para que el contenido posicionado no se pinte encima. En una página real, la caja que se desplaza es la propia página, así que el header va directamente en <body>.

Un header con position: fixed también se queda en su sitio, pero sale del flujo de la página, así que el contenido se desliza por debajo y necesita padding arriba. Sticky conserva su espacio en el diseño.

Qué puede ir en un header

Un header puede contener casi cualquier contenido: encabezados, una imagen de logo, un <nav>, un formulario de búsqueda, un botón. No puede contener otro <header> ni un <footer>, y no puede estar dentro de un <footer>, un <address> u otro <header>.

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

Cuando el logo es un enlace a la página de inicio, su texto alt debe decir a dónde va el enlace ("Acme home"), porque es lo que anuncia un lector de pantalla.

Errores comunes

  • Confundir <header> con <head>. Los metadatos van en <head>; el contenido visible nunca.
  • Usar <header> para cada encabezado. Un encabezado solo no necesita un header alrededor. Usa <header> cuando haya un grupo de contenido introductorio.
  • Un header sticky sin fondo. El texto de la página se ve pasar a través de él. Define un background.
  • Sticky que no se queda fijo. Un ancestro con overflow: hidden u overflow: auto se convierte en la caja de desplazamiento del sticky, así que el header se queda fijo dentro de esa caja (o no se queda). Revisa los ancestros.
  • Poner el menú del sitio en un <div> dentro del header. Usa <nav> para que quienes usan lectores de pantalla puedan saltar a él.

Preguntas frecuentes

¿Qué es la etiqueta header en HTML?

<header> es un elemento semántico para contenido introductorio: el logo y el menú del sitio en la parte superior de la página, o el título y la autoría al principio de un artículo. Es una caja de bloque normal sin estilo por defecto.

¿Qué diferencia hay entre head y header en HTML?

<head> es la parte invisible del documento, con el <title>, las etiquetas <meta> y los enlaces a hojas de estilo, y hay exactamente uno. <header> es contenido visible dentro de <body>, y una página puede tener varios.

¿Una página puede tener más de un elemento header?

Sí. Una página suele tener una cabecera del sitio, y cada <article> o <section> puede tener su propio <header> para su título y su información. Solo un header que no está dentro de article, aside, main, nav o section cuenta como banner de la página para los lectores de pantalla.

¿El nav va dentro del header?

Puede ir, y suele ir cuando el menú principal está en la parte superior de la página. Poner <nav> fuera de <header> también es válido; elige lo que encaje con tu diseño.

¿Cómo hago que un header se quede arriba al desplazarse?

Dale position: sticky; top: 0; más un color de fondo y un z-index, para que el contenido pase por debajo. Sticky solo funciona mientras el padre del header es más alto que el header, y un ancestro con overflow: hidden impide que se quede fijo respecto a la página.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR