Mi Sitio Web
¿Qué es un Sticky Header / Footer?
Los elementos sticky combinan características de position: relative y position: fixed. Permiten que un elemento se mantenga dentro del flujo del documento hasta que su contenedor cruza un umbral (top o bottom), momento en el cual se “pega” al borde del viewport.
Esta técnica es útil para menús de navegación, barras de acción, o avisos de cookies que deben estar siempre visibles sin ocultar contenido.
Ejemplo Básico de Sticky Header
.sticky-header {
position: sticky; /* Activamos sticky */
top: 0; /* Se adhiere al top */
z-index: 1020; /* Evita solapamiento */
background: #0d6efd;
color: #fff;
padding: .75rem 1rem;
}
El top: 0 indica que el encabezado se fijará cuando su borde superior llegue al top del viewport. Cambiar a top: 10px crearía un pequeño margen.
Ejemplo Básico de Sticky Footer
.sticky-footer {
position: sticky;
bottom: 0; /* Se adhiere al bottom */
background: #212529;
color: #fff;
padding: .5rem 1rem;
}
El bottom: 0 hace que el pie de página se mantenga visible al final del scroll, pero solo después de que su contenedor haya sido desplazado lo suficiente.
Comparativa: Sticky vs Fixed vs Relative
position: sticky
- Ventajas:
- Mantiene el flujo del DOM.
- Respeta contenedores con overflow.
- Menor riesgo de superposición inesperada.
- Desventajas:
- No funciona en navegadores muy antiguos (IE11).
- Requiere un contenedor con altura definida.
position: fixed
- Ventajas:
- Se mantiene siempre visible, independiente del scroll.
- Ideal para barras de notificaciones persistentes.
- Desventajas:
- Saca el elemento del flujo, puede cubrir contenido.
- Requiere manejo explícito de z-index y padding del body.
position: relative
- Ventajas:
- Comportamiento por defecto, sin efectos colaterales.
- Desventajas:
- No permite fijar el elemento en la pantalla.
Mejores Prácticas y Optimización
- Define un
z-indexadecuado. Los navegadores aplican una capa de apilamiento a los elementos sticky; sin un valor explícito pueden quedar bajo modales o dropdowns. - Evita
overflow: hiddenen el contenedor padre. Un contenedor con overflow oculto corta la capacidad sticky de sus hijos. - Usa
will-change: transform(opcional) para indicar al motor de renderizado que el elemento cambiará su posición, reduciendo el “jank” en scroll intensivo. - Prueba en dispositivos móviles. En iOS Safari,
position: stickynecesita que el elemento tenga unbackgroundsólido para funcionar correctamente.
Accesibilidad (a11y)
Los encabezados y pies de página sticky pueden interferir con lectores de pantalla si no se marcan adecuadamente. Recomendaciones:
- Utiliza
role="banner"para el header yrole="contentinfo"para el footer. - Asegúrate de que el contraste de colores cumpla con WCAG AA (ratio ≥ 4.5:1).
- Si el sticky contiene enlaces de salto ("Ir al contenido"), colócalos al inicio del
bodypara que sean fácilmente accesibles.
Solución de Problemas Comunes
- El elemento no se pega
- Verifica que el contenedor padre tenga una altura mayor a la del elemento sticky y que no tenga
overflow: hiddenooverflow: autoque lo recorte. - Superposición con otros componentes
- Ajusta
z-indexy, si es necesario, agregamargin-topalmainequivalente a la altura del header sticky. - Problemas en Safari iOS
- Asegúrate de que el elemento tenga un
backgrounddefinido y que no esté dentro de untransformaplicado al padre.
Sticky Headers y Footers con CSS: Guía Completa y Ejemplos Prácticos