Introducción
Un header transparente sobre la imagen hero aporta un aspecto moderno y elegante a cualquier web en WordPress. La idea es que la cabecera (logo, navegación, botones) quede superpuesta sobre la imagen o bloque hero, con el fondo de la cabecera en transparente mientras la imagen se ve debajo. Este artículo explica, paso a paso y con todo lujo de detalles, cómo lograrlo con CSS, cómo manejar la versión fija (sticky) y cambios de estilo al hacer scroll, cómo integrarlo en WordPress (child theme, Customizer o snippets), y cómo evitar errores comunes en escritorio y móvil.
Concepto y consideraciones antes de empezar
Antes de tocar CSS o JS debes tener en cuenta:
- Selector del header: cada tema usa clases/IDs distintos (.site-header, .main-header, .ast-header, .header-wrapper, .elementor-location-header, etc.). Localiza el selector correcto con las herramientas de desarrollador del navegador.
- Altura del header: si el header queda encima del contenido, habrá que dejar un espacio (padding/margin) en el hero para que no lo tape por completo.
- Legibilidad: texto blanco sobre imagen puede perder contraste normalmente se usan sombras, overlays o se cambia el color del texto al hacer scroll.
- Móvil: el menú hamburguesa y la navegación desplegable requieren z-index y quizá un fondo cuando está abierta para evitar problemas de interacción.
- Forma de añadir código: preferible usar un child theme o el panel de Additional CSS de WordPress los snippets PHP/JS deben encolarse correctamente.
Pasos generales (resumen)
- Identificar el selector de la cabecera del tema.
- Hacer la cabecera position: absolute o fixed y background: transparent.
- Asegurar un z-index superior al hero.
- Añadir padding-top al hero igual a la altura del header (o usar spacer CSS variable).
- Agregar transición y lógica para cambiar el fondo al hacer scroll (para accesibilidad).
- Tratar casos móviles y menús desplegables.
Ejemplo 1: CSS básico para header transparente sobre hero
Este fragmento funciona si tu header usa la clase .site-header y el hero tiene la clase .hero. Pegarlo en Apariencia → Personalizar → CSS adicional o en el CSS del child theme.
/ Header transparente superpuesto /
.site-header {
position: absolute / o fixed si quieres que se pegue al hacer scroll /
top: 0
left: 0
width: 100%
background: transparent
z-index: 1000 / asegurarse de que esté por encima del hero /
transition: background-color 0.25s ease, box-shadow 0.25s ease
}
/ Evitamos que el contenido del header tape la imagen hero ajustando el stacking /
.hero {
position: relative
z-index: 1
padding-top: 120px / ajustar según la altura real del header /
}
Notas sobre este CSS
- Si quieres que el header esté fijo mientras se hace scroll, usa position: fixed pero en ese caso el contenido siguiente debe tener padding-top suficiente para no quedar oculto.
- Si el tema ya aplica position: sticky o fixed, es posible que necesites usar !important en selectores específicos o sobrescribir con mayor especificidad.
Ejemplo 2: Cambio de fondo al hacer scroll (mejor legibilidad)
Comportamiento común: el header es transparente al cargar la página (overlay sobre el hero) y al hacer scroll se le aplica una clase que le da fondo sólido o semitransparente para mejorar la lectura.
CSS (clase .site-header.scrolled):
.site-header.scrolled {
background-color: rgba(255,255,255,0.95) / fondo claro al hacer scroll /
box-shadow: 0 2px 8px rgba(0,0,0,0.08)
color: #222
}
.site-header.scrolled a { color: #222 } / links en color oscuro al hacer scroll /
JavaScript sencillo para añadir/quitar la clase cuando se supera un umbral (ej. 50px):
// Añadir este script al footer o encolado correctamente
(function() {
var header = document.querySelector(.site-header)
if (!header) return
var threshold = 50 // px
var onScroll = function() {
if (window.scrollY > threshold) {
header.classList.add(scrolled)
} else {
header.classList.remove(scrolled)
}
}
document.addEventListener(scroll, onScroll, { passive: true })
onScroll()
})()
Para añadir este JS sin editar plantillas, crea un archivo .js y encolalo vía functions.php (ejemplo más abajo).
Ejemplo 3: Encolar el JS desde functions.php (WordPress)
Coloca esto en el functions.php de tu child theme o en un snippet manager. Asegúrate de usar un identificador único.
/ Encolar script para cambiar la clase del header al hacer scroll /
function tema_child_enqueue_header_script() {
// Ajusta la ruta al archivo .js ubicado en tu child theme /assets/js/header-scroll.js
wp_enqueue_script(
child-header-scroll,
get_stylesheet_directory_uri() . /assets/js/header-scroll.js,
array(),
1.0,
true
)
}
add_action(wp_enqueue_scripts, tema_child_enqueue_header_script)
Selección de selectores por tema (tabla guía)
| Tema | Selector común del header |
|---|---|
| Astra | .ast-header, .ast-site-header |
| GeneratePress | .site-header, .main-navigation |
| Twenty Twenty-Three / bloques | .wp-block-template-part, .wp-block-site-header |
| Elementor | .elementor-location-header, .header-wrapper |
| OceanWP | .oceanwp-mobile-header, .site-header |
Trucos y detalles técnicos importantes
- Z-index: ajusta z-index con cuidado. El header suele necesitar un valor alto (ej. 1000) para estar por encima de sliders o hero con z-index propio.
- Compatibilidad con slider/hero plugins: algunos sliders usan z-index alto y position: relative comprueba y ajusta.
- Evitar que enlaces queden detrás: si usas position: absolute en el header, asegúrate de que el header sea clickable (z-index y pointer-events: auto).
- Transiciones suaves: añade transition en background-color y transform para que el cambio al hacer scroll sea agradable.
- Imagen hero responsive: usa background-size: cover o object-fit en img para mantener el comportamiento responsivo.
- Logo alternativo: suele necesitarse un logo claro sobre la imagen y uno oscuro para la versión scrolled cambialo con CSS o con JS cambiando la ruta del src o usando filter si procede.
- Forzar overrides: si el tema aplica estilos con mucha especificidad, usa tus selectores con mayor especificidad o como último recurso !important.
Ejemplo: cambiar logo con CSS según clase scrolled
/ Suponiendo que el logo es una img dentro de .site-logo img /
.site-logo img { transition: opacity 0.25s ease }
/ Ocultar logo claro cuando se hace scroll y mostrar logo oscuro /
.site-logo img.logo-dark { display: none }
.site-header.scrolled .site-logo img.logo-dark { display: inline-block }
.site-header.scrolled .site-logo img.logo-light { display: none }
Móvil: menú hamburguesa y superposición
En móvil es habitual que el menú desplegable quede por debajo o por encima con problemas. Recomendaciones:
- Asegúrate que el panel del menú tenga z-index mayor que el header cuando esté abierto.
- Aplica un fondo al estado abierto para mejorar legibilidad (ej. background-color semitransparente en el contenedor del nav).
- Si usas position: absolute para el header, comprueba el comportamiento del menú al abrir y al desplazarte añade transiciones y reglas específicas para .menu-open o la clase que el tema use.
Ejemplo CSS para menú móvil:
/ Selector de ejemplo, adaptar según tema /
.main-navigation.toggled-on {
position: fixed
top: 0
left: 0
width: 100%
height: 100%
background: rgba(0,0,0,0.7) / fondo oscuro al abrir el menú /
z-index: 1100 / por encima del header /
}
Cómo medir la altura del header y aplicar el espaciado correcto
- Inspecciona el header en el navegador y mide su altura real en px (o usa una variable CSS si tu tema la expone).
- Aplica padding-top al hero igual a esa altura (o usa calc y variables para mantenerlo responsive).
- Si el header cambia de tamaño en móviles (más alto), usa media queries para ajustar el padding-top del hero en cada breakpoint.
/ Ejemplo responsive: ajustar el espacio del hero según alturas /
.hero {
padding-top: 90px / escritorio /
}
@media (max-width: 768px) {
.hero {
padding-top: 120px / más alto en móvil si el header ocupa más espacio /
}
}
Problemas comunes y soluciones rápidas
- El header tapa el anchor interno (hash links): añade scroll-margin-top en el objetivo para compensar la altura del header.
:target { scroll-margin-top: 100px } - El slider sobrepasa el header: baja el z-index del slider o sube el del header.
- Menu desplegable se corta: asegura que el contenedor tenga overflow visible y suficiente z-index.
- Cabecera deja de ser clicable en móviles: comprueba pointer-events y z-index de elementos superpuestos.
Accesibilidad y contraste
La cabecera debe mantener buen contraste para usuarios con baja visión. Si el hero es muy claro/oscuro, considera:
- Agregar un overlay semitransparente sobre el hero solo debajo de la cabecera.
- Proporcionar un fondo de cabecera en el foco o al desplegar menús.
- Asegurar que los enlaces tengan enfoque visible (outline) y suficiente tamaño táctil en móviles.
Ejemplo completo (resumen de implementación)
1) Localiza el selector de tu header (ej. .site-header). 2) Añade CSS para hacerlo absoluto y transparente. 3) Ajusta el hero con padding-top. 4) Añade JS para alternar clase scrolled. 5) Encola el JS desde functions.php si lo deseas.
/ CSS completo de ejemplo /
.site-header {
position: absolute
top: 0
left: 0
width: 100%
background: transparent
z-index: 1000
transition: background-color 0.25s ease, box-shadow 0.25s ease
}
.site-header .main-navigation a { color: #fff } / links blancos sobre imagen /
.site-header.scrolled {
background-color: rgba(255,255,255,0.95)
box-shadow: 0 2px 8px rgba(0,0,0,0.08)
}
.site-header.scrolled .main-navigation a { color: #222 }
/ Espacio para el hero según la altura del header /
.hero { padding-top: 110px }
@media (max-width: 768px) {
.hero { padding-top: 140px }
}
// JS para alternar la clase .scrolled
(function() {
var header = document.querySelector(.site-header)
if (!header) return
var threshold = 60
function onScroll() {
if (window.scrollY > threshold) header.classList.add(scrolled)
else header.classList.remove(scrolled)
}
document.addEventListener(scroll, onScroll, { passive: true })
onScroll()
})()
Conclusión
Implementar un header transparente sobre el hero en WordPress requiere principalmente tres cosas: identificar el selector correcto del header, posicionarlo encima del hero con z-index y ajustar el espaciado del hero. Añadir una transición visual al hacer scroll y gestionar el menú móvil elevan la experiencia de usuario. Aplicando los fragmentos CSS/JS y las recomendaciones aquí dadas obtendrás un resultado elegante y estable en la mayoría de temas. Ajusta selectores y valores (height, umbrales, colores) según tu diseño concreto.
Recuerda
Integra los cambios mediante un child theme o el Customizer, prueba en diferentes dispositivos y navegadores, y mide el contraste para mantener la accesibilidad.
Leave a Reply