jQuery fixed on top für Contao
Anleitung für Contao 5.3
In modernen Weblayouts ist es oft gewünscht, dass bestimmte Inhalte beim Scrollen fixiert bleiben. Dazu zählen beispielsweise Navigationsleisten, Suchfelder, Buttons oder Hinweisboxen. Mit jQuery lässt sich dieses Verhalten einfach umsetzen. Für Contao stehen dafür zwei kleine JavaScript-Lösungen bereit, die als Templates eingebunden werden können: j_sticky_fixed_header.html5 und j_sticky_fixed_top.html5.
Die Agentur Zentral GmbH realisiert professionelle Webseiten für Unternehmen. Auch bestehende Webseiten werden individuell angepasst und weiterentwickelt.
Funktionsweise der Scripte
1. Script j_sticky_fixed_header.html5
Dieses Script sorgt dafür, dass ein Element mit der Klasse .fixed-on-top
nicht direkt am oberen Bildschirmrand fixiert wird, sondern unterhalb des Elements #header
.
Der Ablauf im Detail:
- Das Script ermittelt die ursprüngliche Position des fixierten Elements sowie die Höhe des Headers (
#header
). - Beim Scrollen prüft jQuery, ob der Scrollwert größer ist als die Ausgangsposition des Elements abzüglich der Headerhöhe.
- Falls ja, erhält das Element
.fixed-on-top
die zusätzliche CSS-Klasse.fixed
und wird mittop: header
direkt unterhalb des Kopfbereichs positioniert. - Gleichzeitig wird für das nachfolgende Element mit
.fixed-on-top-item
ein Abstand in Höhe des fixierten Elements erzeugt. Dadurch verschiebt sich das Layout nicht unkontrolliert nach oben. - Wird wieder nach oben gescrollt, entfernt das Script alle gesetzten Klassen und Styles, sodass das Element an seiner ursprünglichen Position steht.
Einsatzgebiet:
Ideal für Webseiten mit einem festen Kopfbereich (Logo, Navigation), bei denen weitere Inhalte darunter dauerhaft sichtbar bleiben sollen.
<script>
$(document).ready(function() {
var top = $('.fixed-on-top').offset().top;
var header = $('#header').height();
var height = $('.fixed-on-top').height();
$(window).scroll(function(){
if ($(this).scrollTop() > top - header) {
$('.fixed-on-top').addClass('fixed');
$('.fixed-on-top').css('top', header);
$('.fixed-on-top-item').addClass('fixed');
$('.fixed-on-top-item').css('margin-top', height);
} else {
$('.fixed-on-top').removeClass('fixed');
$('.fixed-on-top').css('top', '');
$('.fixed-on-top-item').removeClass('fixed');
$('.fixed-on-top-item').css('margin-top', '');
}
});
});
</script>
2. Script j_sticky_fixed_top.html5
Dieses Script arbeitet ähnlich, verzichtet jedoch auf den Bezug zum Header. Das Element wird direkt am oberen Bildschirmrand fixiert.
Der Ablauf im Detail:
- Ausgangsposition und Höhe des Elements werden bestimmt.
- Sobald der Scrollwert größer ist als die ursprüngliche Position, wird das Element mit
.fixed-on-top
fixiert. - Auch hier erhält das nachfolgende Element
.fixed-on-top-item
einen Abstand, um Layout-Verschiebungen zu verhindern. - Beim Zurückscrollen wird das Element wieder an seiner ursprünglichen Stelle angezeigt.
Einsatzgebiet:
Geeignet für Inhalte, die unabhängig vom Header jederzeit am oberen Bildschirmrand sichtbar sein sollen – beispielsweise eine fixe Call-to-Action-Leiste oder ein Hinweisbanner.
<script>
$(document).ready(function() {
var top = $('.fixed-on-top').offset().top;
var height = $('.fixed-on-top').height();
$(window).scroll(function(){
if ($(this).scrollTop() > top ) {
$('.fixed-on-top').addClass('fixed');
$('.fixed-on-top').css('top');
$('.fixed-on-top-item').addClass('fixed');
$('.fixed-on-top-item').css('margin-top', height);
} else {
$('.fixed-on-top').removeClass('fixed');
$('.fixed-on-top').css('top', '');
$('.fixed-on-top-item').removeClass('fixed');
$('.fixed-on-top-item').css('margin-top', '');
}
});
});
</script>
Unterschiede im Überblick
Script | Fixierung an Position | Typischer Anwendungsfall |
---|---|---|
j_sticky_fixed_header.html5 | Direkt unterhalb des #header |
Navigations- oder Funktionsleisten unterhalb der Hauptnavigation |
j_sticky_fixed_top.html5 | Ganz oben am Bildschirmrand | Banner, Hinweisleisten, schmale Toolbars |
Einbindung in Contao
Die Integration in Contao erfolgt in drei einfachen Schritten:
- Template anlegen
- Im Contao-Template-Ordner eine Kopie von
j_sticky_fixed_header.html5
oderj_sticky_fixed_top.html5
erstellen. - Das gewünschte Script einfügen.
- Im Contao-Template-Ordner eine Kopie von
- Template einbinden
- Im Seitenlayout im Bereich jQuery-Templates das zuvor angelegte Template auswählen.
- Klasse vergeben
- Dem gewünschten Element im Inhaltselement die CSS-Klasse
.fixed-on-top
hinzufügen. - Optional: Das nächste Element erhält die Klasse
.fixed-on-top-item
, damit der Layoutfluss korrekt bleibt.
- Dem gewünschten Element im Inhaltselement die CSS-Klasse
CSS-Beispiel für die Fixierung
Damit die Funktion korrekt arbeitet, ist ein kurzes CSS notwendig:
.fixed {
position: fixed;
width: 100%;
z-index: 1000;
}
Dieses Beispiel fixiert das Element dauerhaft sichtbar, sorgt für volle Breite und garantiert mit z-index
, dass es nicht von anderen Elementen überlagert wird.
Fazit
Mit wenigen Zeilen jQuery lassen sich Elemente elegant am oberen Bildschirmrand oder unterhalb des Headers fixieren. Die Integration in Contao ist unkompliziert und erfordert lediglich ein zusätzliches Template sowie die Zuweisung einer CSS-Klasse. Dadurch lassen sich Navigationsleisten, Hinweisboxen oder Call-to-Action-Elemente benutzerfreundlich hervorheben und dauerhaft im Blickfeld halten.