Header fijo: CSS position: sticky y ocultar al desplazar

Guía de header fijo

Header fijo en CSS: position sticky, encoger y ocultar al desplazar | We.Inc

Crea un header fijo con position: sticky y luego añade encogimiento y ocultación al desplazar. Demo en vivo, desplazamiento de anclas con scroll-margin, arreglos de z-index y un pequeño hook de React.

Dale al header position: sticky y top: 0, además de un fondo y un z-index, y se quedará fijo mientras la página se desplaza. Solo se queda pegado dentro de su elemento padre, y un ancestro con overflow definido puede impedirlo. Para un header que se oculta al desplazar, alterna una clase con translateY desde un listener de scroll.

sticky frente a fixed para headers

Los headers fijos son una línea de CSS hasta que dejan de serlo: el header se niega a quedarse pegado, los enlaces de ancla caen debajo de él o un menú desplegable se cuela detrás del contenido. Esta página cubre esa línea de CSS y luego cada uno de esos fallos, con una demo de scroll en vivo en la que puedes cambiar entre los modos simple, encoger y ocultar.

Preguntas frecuentes

¿Por qué no funciona mi position: sticky?

Tres causas habituales: no hay un valor de inset como top: 0, un padre que termina justo después del header y no deja espacio para quedarse pegado, o un ancestro con un overflow distinto de visible, que se convierte en la caja a la que se pega el header. Revísalas en ese orden.

¿Un header debe ser sticky o fixed?

Sticky es más sencillo porque conserva su lugar en la maquetación, así que nada salta debajo de él en la parte superior de la página. Fixed es útil cuando el header debe ir sobre un hero a pantalla completa, pero entonces tienes que añadir tú el padding a la página.

¿Cómo evito que los enlaces de ancla queden ocultos bajo un header fijo?

Añade scroll-padding-top al contenedor con scroll, normalmente html, igual a la altura del header. Para destinos puntuales puedes poner en su lugar scroll-margin-top en el propio título.

¿Por qué mi menú desplegable aparece detrás del contenido de la página?

El posicionamiento sticky crea un contexto de apilamiento, así que todo lo que hay dentro del header solo puede apilarse dentro de él. Eleva el propio header con un z-index superior al contenido posterior, por ejemplo z-index: 50, en lugar de elevar el desplegable.

Cómo funciona sticky de verdad

Ocultar al bajar, mostrar al subir

Encoger sin saltos en la maquetación

El header fijo básico

Header fijo dentro de una página con scroll

Desplázate en el marco. El header se queda arriba y el enlace de ancla se detiene debajo gracias a scroll-padding-top.

Ocultar al bajar, mostrar al subir

CSS para los estados oculto y encogido

El script solo define atributos data. Todos los cambios visuales viven en el CSS.

Hook de React: useHideOnScroll

Devuelve dos booleanos que puedes pasar al header como atributos data. El umbral de 8px ignora los pequeños temblores.

Errores comunes con headers fijos

Síntomas y soluciones

Sticky simple

Encoger

Ocultar al desplazar

Demo de scroll en vivo

Cambia entre simple, encoger y ocultar al desplazar, y luego desplázate dentro de la caja.

Modo del header

Página de demo con scroll

Marca

Baja y luego sube un poco.

Estado del header: visible

Estado del header: visible, desplazado

Estado del header: oculto

Estado del header: oculto, desplazado

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio