div float bottom — es geht doch!
Ok … etwas gelogen ist die Überschrift dann schon. Direkt ein float: bottom; ist einfach durch die Spezifikationen nicht gegeben
Auch eine Google-Anfrag nach div float bottom bringt nicht immer das gewünschte Ergebnis. Aber einen kleinen Workaround gibt’s jetzt…
Manchmal ist es doch einfach zum verrückt werden. Da bietet CSS 2 schon viele schöne Features, aber die scheinbar trivialen Dinge sind nicht mit dabei. Beispiel: float bottom;.
Szenario: wir wollen auf einer Seite zwei div-Container so verschachteln, dass der äußere am unteren Rand “klebt”. Viele verzweifeln und versuchen das Problem vielleicht sogar mit JavaScript zu lösen. Dabei gibts einen einfacheren Weg, den ich euch jetzt aufzeigen will.
Ausgangslage
Wir haben eine Seite mit einem Wrapper, der die Seite komplett umschließt: #page_wrapper. Darin sind dann diverse Bereich wie Header, Menü, Sidebar, Hauptbereich und Footer enthalten. Am Ende des Hauptbereichs (#content) soll ein kleiner Bereich für Zusatzinformationen (#info; das gewünschte div float bottom) platziert werden.
Lösungsansatz für das div float bottom
Dazu schreiben wir jetzt folgenden code:
<div id="page_wrapper">
<div id="content">
<p>Ich habe viiiiiiiel Inhalt und bin sehr lang</p>
<div id="info">
<p>Zusatzinformationen</p>
</div>
</div>
</div>
Das entsprechende CSS um das Problem in den Griff zu bekommen:
* {
padding: 0;
margin: 0;
}
#page_wrapper {
width: 980px;
margin: 0 auto;
}
#content {
width: 560px;
height: 300px;
background-color: #abcdef; /* zur visuellen Darstellung */
position: relative; /* (1.) */
}
#info {
width: 300px;
height: 50px;
background-color: #fedcba;
position: absolute; /* (2.) */
bottom: 0px; /* (3.) */
right: 0px; /* (4.) */
}
Damit “klebt” der info–div am unteren (rechten) Rand des content–Container. Wichtig hierbei ist die Positionierung der Elemente. Das Element, welches das klebende enthalten soll, muss relativ positioniert werden. Das Element, welches nach unten “floaten” (div float bottom) soll, muss absolut am relativ positionierten Element ausgerichtet werden. Dann kann man natürlich noch entscheiden, in welche Richtung es ausgerichtet werden soll.
Probleme (Peekaboo Bug) / Ausblick
Wird keine Höhenangabe der Elemente gemacht, und die äußeren Elemente haben keinen Inhalt, kann es zu Problemen kommen. Ein Ansatz wäre die min-height–Anweisung.
Eine Alternative ist, dass man einen Container mit der Eigenschaft clear: all; einbaut. Das Problem nennt sich auch “Peekaboo Bug” und ist gerade im IE6 anzutreffen.
Peekaboo Bug — Lösung
Man gibt dem Elternelement folgendes CSS mit:
* html #page_wrapper { height: 1%; }
Das sollte es gewesen sein