Startseite BlogBarrierefreiheit, WebdesignResponsive, sticky Footer

Responsive, sticky Footer

15. Oktober 2013 — Barrierefreiheit Webdesign
Responsive, sticky Footer

Sticky Footer bedeutet, dass die Fußzeile immer am gefühlten unteren Ende der Seite „kleben“ (daher sticky) soll. Ist die Seite also länger als das Browserfenster, soll der Footer ganz normal darunter angeordnet sein. Ist die Seite aber inhaltlich (viel) kürzer, soll der Footer auch am unteren Fensterrand haften und nicht bereits am eigentlichen Ende der Seite irgendwo in der Bildschirmmitte schweben. Ist die Höhe des Footers aufgrund flüssigen, responsiven Designs allerdings flexibel hoch, lässt sich das nicht so leicht lösen: die 3 derzeit besten Lösungsansätze mit ihren Vor- und Nachteilen.

Der sticky Footer klebt nicht

Responsive, sticky Footer

Der Footer soll auch bei responsivem Webdesign immer unten “kleben”


Wie eingangs kurz beschrieben ist das im Grunde nur ein optisches Problem, wenn die jeweilige Seite wenig Inhalt aufweist und daher sehr kurz ist. Der Footer klebt dann direkt unter dem Inhalt, was bei normalen Desktop-Bildschirmen dazu führt, dass die Seite gefühlt in der Mitte endet, da die Fußzeile mittendrin „hängt“.

Diesen Fall will man möglichst einfach (per CSS ohne JavaScript) und kompatibel für alle gängigen Browser lösen: den sticky Footer im responsiven Webdesign.

Problem und Lösung des responsive, sticky Footers

Problem und Lösung des responsive, sticky Footers

Lösung des sticky Footers mit fester Höhe

Die ursprüngliche Lösung von Ryan Fait ist mittlerweile ein Klassiker und wurde seitdem vielfach genutzt, da sie sehr einfach (reines CSS) und in allen gängigen Browsern nutzbar ist. Allerdings setzt dieser Ansatz voraus, dass der Footer eine fixe, vorher definierte Höhe hat.

Hierzu nutzt man einen Container (hier wrapper), der die ganze Seite außer den Footer (hier stickyfooter) umfasst.

<div id="wrapper">Inhalt ohne Footer</div>
<footer id="stickyfooter">Sticky Footer</footer>

Diesem Wrapper-Container gibt man nun 100% (Mindest-)Höhe. Dadurch bleibt wie gewünscht bei langen Seiten alles beim alten und bei kurzen Seiten, beginnt der Footer direkt unter der unteren Bildschirmkante (eben ab 100% des wrappers).
Da ich die Höhe des Footers aber fest definiert habe, schiebt man nun einfach den Footer um diese Höhe nach oben. Schon klebt der Footer auch bei kurzen Seiten am unteren Bildschirmrand (check). Damit bei langen Seiten keine Überlappung eintritt, gibt man dem Wrapper den entsprechenden Abstand (= Höhe des Footers) nach unten (mit negativem margin). Vereinfacht:
#wrapper{min-height:100%; margin:0 auto -50px; height:auto !important}
#stickyfooter{height:50px; margin-top:-50px}

Das klappt mit position:relative für wrapper und footer und height:100% für html, body selbst im Internet Explorer 5 von gefühlt 1953; nur der Opera benötigt einen :before-Fix.
Diese Lösung setzt aber voraus, dass ich die Höhe des Footers fest definieren kann. Das ist bei einem responsivem Webdesign, das sich kleineren mobilen Bildschirmen dynamisch anpasst, aber in der Regel gerade nicht der Fall.
Daher ist diese an sich einfache und clevere Lösung hierzu nicht tauglich.
Aber es gibt Abhilfe:

1. Responsive, sticky Footer mit flexibler Höhe per CSS dank Tabellen

Tabellen fürs Layout im modernen, responsiven Webdeisgn? Das ist kein Widerspruch, da wir nicht wirklich Tabellen im Code nutzen, sondern diese per CSS nur simulieren.

Der obige Lösungsansatz mit fester Footer-Höhe ist schon einige Jahre alt. Mittlerweile verstehen (“dank” Microsoft fast) alle modernen Browser neue, weitere CSS-Anweisungen, die man hierzu nutzen kann. Wir verwenden davon display:table und display:table-row.

Wir brauchen dazu wieder einen umschließenden Container (hier wrapper), der aber nunmehr den responsiven, sticky Footer (hier stickyfooter) umfassen muss.

<div id="wrapper">Inhalt ohne Footer
<footer id="stickyfooter">Sticky Footer</footer>
</div>

Dem wrapper geben wir nun die Anweisung display:table. Er verhält sich dadurch wie eine Tabelle (wodurch auch width:100% und height:100% für html und body Sinn machen).
Dem sticky Footer geben wir die Eigenschaft display:table-row wodurch sich die Fußzeile wie eine Tabellenzeile verhält, welche wie gewünscht bei langen wie kurzen Seiten am unteren Ende kleben bleibt.
Klasse Lösung könnte man meinen, da ebenfalls einfach und die display: table-Sache auch fast alle gängigen Browser kapieren. Nur der Internet Explorer 6 und 7 braucht etwas Nachhilfe mit height:1px für den stickyfooter und height:100%, zoom:1 für den wrapper. Mit etwas JavaScript kann man diese Lösung nochmals verbessern; andere arbeiten mit einem leeren Push-Container vor dem Footer mit height:auto.

Aber diese Lösung ist leider nicht 100%ig responsive. Bei einfachen Inhaltselementen einer Webseite sollte das Design durchaus sauber skalieren und sich flüssig wie gewünscht den mobilen Endgeräten anpassen. Benutzt man aber beispielsweise Slider, die mit (unsichtbaren) Überbreiten arbeiten, funktioniert dieser Ansatz schon nicht mehr.
Der display:table-Ansatz ist daher für viele Seiten eine zeitgemäße Lösung, muss aber je nach genutzten Elementen auf seine Tauglichkeit im Einzelfall getestet werden.

2. Responsive, sticky Footer mit flexibler Höhe per CSS dank flexbox

Nun kommen wir zur Zukunft bzw. der neuesten Gegenwart der meisten modernen Browser. Denn für Internet Explorer 8 und 9 funktioniert diese Lösung nicht. Dazu gleich mehr.

Es gibt eine kommende Umsetzung des klassischen Boxen-Modells, kurz flexbox, das in CSS3 flexible Boxen-Module erlaubt (mehr dazu). Das zwar noch nicht Standard, aber moderne Browser können es bereits (weitgehend) korrekt anzeigen. Das bietet bislang ungeahnte Möglichkeiten nur per CSS und ist allein schon daher ein guter Grund sich eingehender damit zu befassen.

Der Code erfordert keinerlei Zusatzcontainer:

<body>
Inhalt ohne Footer
<footer id="stickyfooter">Sticky Footer</footer>
</body>

Wichtig sind nun folgende CSS-Zuweisungen:

body{display:flex; min-height:100vh; flex-direction:column}
#stickyfooter{flex:1}

That’s it! Guckst Du.

Nachteil ist natürlich die derzeitig mangelnde Unterstützung aller gängigen Browser, teilweise sind auch die prefixe -ms-, -webkit- usw. noch erforderlich.

Browser-Unterstützung des felxbox-Modells

Browser-Unterstützung des felxbox-Modells

3. Sticky und responsive Footer dank JavaScript (jQuery)

Bis zur ausreichenden Unterstützung kann man etwa auch mit JavaScript und beispielsweise der Bibliothek jQuery nachhelfen, zumal man diese häufig bereits sowieso geladen hat.
Dazu gibt es haufenweise Lösungsmöglichkeiten, wobei mir persönlich die meisten viel zu aufwändig sind. Ich will für dieses Problem nicht beim Seitenladen und Änderns des Browserfensters immer zur Laufzeit den genauen Pixelabstand des Footers nach oben berechnen (müssen).

Machen wir uns dazu noch einmal kurz das eingangs geschilderte Problem bewusst. Bei langen Seiten gibt es kein Problem. Der Footer klebt am Seitenende wo er auch hin soll. Nur bei kurzen Seiten muss der Footer nicht ans Seitenende, sondern ans untere Bildschirmende.

Daher würde es reichen, per JavaScript abzufragen, ob die Seite (body) höher als das Bildschirmfenster (window) ist. Wenn ja, ist nichts veranlasst. Wenn nicht (die Seite ist kürzer), reicht es, dem Footer ein position:absolute; bottom:0 per CSS zu verpassen.

Beispielsweise bei jQuery kann das dann so aussehen:

var bodyHeight = $("body").height();
var vwptHeight = $(window).height();
if (vwptHeight > bodyHeight) {
$("footer").css("position","absolute").css("bottom",0);
}

document bzw body misst die Seitenhöhe, window die jeweilige Bildschirmhöhe. Dieses Messen könnte man auch bei resize, also beim nachträglichen Ändern des Browserfensters wiederholen, wodurch es noch dynamischer wird.

Eigentlich eine klasse, einfache und browserkompatible Lösung. Eigentich, denn es gibt einen Fehler in jQuery: bei der HTML5 doctype (<!DOCTYPE html>) verfallen ältere jQuery-Versionen (soweit ich gesehen habe bis einschließlich 1.8.x) in den unschönen Quirks-Modus. Das führt dazu, dass die Höhenberechnungen falsch sind und document immer dem viewport entspricht. Dadurch kann obige Lösung dummerweise natürlich nicht funktionieren. Ansonsten aber eine nachdenkenswerte Lösung mit vielen Vorteilen – jedenfalls wenn man jQuery oder Mootools oder oder sowieso laden muss.

Der sticky footer im responsive Webdesign

Der sticky footer im responsive Webdesign

Fazit

Die Lösung des sticky Footers bei reponsivem Webdesign ist auf den zweiten Blick gar nicht so einfach wie es auf den ersten Blick scheinen mag.
Auch wenn es nicht die eine Lösung gibt, kann man einen der obigen Ansätze sicher gut verwenden, um im Einzellfall den sticky Footer auch mit flexibler Höhe bei einem responsiven Webdesign sauber umzusetzen.

Weiterführende Links

NETPROFIT Blog

Im Blog schreibt         über CMS, SEO & Webdesign. Kontakt →

Kategorien

Kommentar schreiben zu Responsive, sticky Footer

Kommentare werden erst nach manueller Freischaltung sichtbar.

Kommentar

KommentatorIn

(erforderlich)

(erforderlich, wird nicht angezeigt)

(optional)

Theresienstraße 28
D-94032 Passau

Tel.: +49 (0)851/ 966 31-31
Fax: +49 (0)851/ 966 31-41
E-Mail:

©  2001 − 2014  NETPROFIT  | Kontakt | AGB | Impressum