Idealer Aufbau
shrink-header (sticky)
├─ Logo
└─ Hauptmenü
Bei diesem Aufbau ist der Container, der sticky ist, auch derselbe Container, der beim Scrollen schrumpft.
Das ist die sauberste Variante, weil Elementor den Sticky-Spacer für genau das Element berechnet, dessen Höhe sich verändert.
JavaScript
<script>
document.addEventListener('DOMContentLoaded', function() {
const header = document.querySelector('.shrink-header');
if (!header) {
return;
}
function updateHeader() {
if (window.scrollY > 80) {
header.classList.add('shrink-active');
} else {
header.classList.remove('shrink-active');
}
}
updateHeader();
window.addEventListener('scroll', updateHeader);
});
</script>
CSS
/* HEADER NORMAL */
.shrink-header {
min-height: 90px;
transition:
min-height 0.3s ease,
box-shadow 0.3s ease,
backdrop-filter 0.3s ease;
}
/* LOGO */
.shrink-header .header-logo img {
transform: scale(1);
transform-origin: left center;
transition: transform 0.3s ease;
}
/* HEADER BEIM SCROLLEN */
.shrink-header.shrink-active {
min-height: 70px;
backdrop-filter: blur(10px);
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}
/* LOGO KLEINER */
.shrink-header.shrink-active .header-logo img {
transform: scale(0.8);
}
Elementor-Einstellung
Der Container .shrink-header wird direkt in Elementor auf sticky gesetzt:
Erweitert
→ Motion Effects
→ Sticky: Top
Wichtig: Nicht ein übergeordneter Header-Container, sondern wirklich der Container mit der Klasse shrink-header.
Warum diese Variante stabil ist
Elementor erzeugt bei Sticky-Containern einen Platzhalter:
<div class="elementor-sticky__spacer"></div>
Wenn Sticky-Container und Shrink-Container identisch sind, passen Spacer-Höhe und Header-Höhe zusammen.
Dadurch entsteht kein weißer Streifen unter dem Header.
Merksatz
Gut:
Sticky-Container = Shrink-Container
Problematisch:
Sticky-Container enthält nur einen schrumpfenden Untercontainer. Wenn möglich, immer das Sticky-Element selbst schrumpfen lassen.
Falls aus irgendeinem Grund der innere Container schrumpfen muss, gibt es hier die Lösung.