Floatende Divs gleich hoch machen

Mit Tabellenlayouts war es recht einfach zwei Spalten gleich hoch werden zu lassen, mitunter sehr problematisch wird das aber bei einem modernen DIV-Layout.

Auf die alte Art, haben unsere zwei Spalten gar keine andere Wahl als gleich hoch zu werden, sie sind über das Tabellengerüst aneinander gekettet:
1
2
3
4
5
6
<table>
 <tr>
  <td> ... Ganz viel Text ... </td>
  <td> .. Wengier Text ..</td>
 </tr>
</table>
Quelltext: HTML

Im modernen Box-Layout, sind Tabellen aber tabu, vor Allem wenn es um das Setzen des Layouts, also nicht tabellarischem Inhalt geht:
1
2
3
4
<div id="main">
 <div id="content"> ... Ganz viel Text ... </div>
 <div id="sidebar"> .. Weniger Text .. </div>
</div>
Quelltext: HTML

Die Spalte #sidebar würde hier aufhören, sobald ihr Inhalt zu Ende ist, im Vergleich mit der wesentlich längeren Text-Spalte wäre das mittendrin. Damit man sie jetzt dazukriegt gleich zu werden wie ihre benachbarte Spalte, würde man von der Logik her einfach auf height: 100% zurückgreifen. Das funktioniert in diesem Zusammenhang aber nicht.

Die Lösung findet sich im Netz unter dem Namen "Equal Height Columns" und ist vom Prinzip her recht simpel: Man lässt die Spalten extrem lang werden, länger als der Inhalt je sein wird und setzt die beiden in eine Elternbox und sagt dieser sie soll dass, was überfließt verstecken:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#sidebar {
    padding-bottom: 32768px;
    margin-bottom: -32768px;
    float: right;
    width: 250px;
}
 
#content {
    padding-bottom: 32768px;
    margin-bottom: -32768px;
    float: left;
    width: 520px;
}
 
#main {
    overflow: hidden;
    height: 100%; /* for IE6 */
}
Quelltext: css

Der Riesige Innenabstand dehnt die Spalte jetzt ewig weit nach unten, der negative Außenabstand macht jetzt, dass die Spalte regulär jetzt doch wieder da endet wo sie es ohne den padding getan hätte. Übrig bleibt ein optischer Überhang, der einfach vom Eltern-Element mit overflow: hidden versteckt wird.
Erstellt von Markus René Einicher am 07.04.2009 um 13:26.
Zuletzt bearbeitet von Markus René Einicher am 10.10.2009 um 18:28.
Hier kannst du für uns voten: Vote für uns bei Tutorialzone.de
(1x pro Tag möglich)
Über diesen Button erreichst du diverse Bookmark-Services:

Kommentare

Smartsoul, am 06.08.2008 um 17:22
Great!

Faux-columns usw. hat bei mir nämlich aufgrund der Hintergrundbeschaffenheit nämlich nicht funktioniert.

THX

Smartsoul
Markus René Einicher, am 07.09.2008 um 10:34
Bitteschön, sowas hört man gerne.

Übrigens, hab ich erst kürzlich herausgefunden: damits im IE6 auch funzt dem overflow:hidden div einfach ein height:100% geben.
Günter, am 25.02.2009 um 23:57
Super, so einfach habe ich das noch nie erklärt gesehen! Hat mir sehr weitergeholfen. Besonders der Tipp zu IE6 war Gold wert.
Vielen Dank!
Günter, am 26.02.2009 um 00:29
Super, so einfach habe ich das noch nie erklärt gesehen! Hat mir sehr weitergeholfen. Besonders der Tipp zu IE6 war Gold wert.
Vielen Dank!
CSS-n00b, am 28.04.2009 um 16:22
Bei mir funktionierts irgentwie nicht.
Meine Seite basiert auf einem 3-Spalten-Layout mit header und footer.
Wo muss dann das overlow: hidden hin?
Markus René Einicher, am 29.04.2009 um 07:55
in etwa so:
<div id="header"></div>
<div style="overflow:hidden">
<div id="col1"></div>
<div id="col2"></div>
<div id="col3"></div>
</div>
<div id="footer"></div>
CSS-n00b, am 29.04.2009 um 13:22
Es funktioniert! Super!
Vielen vielen dank!
Du bist echt der beste! =)
Peter Linke, am 05.05.2009 um 19:10
Bei mir funktioniert es nicht. Das overflow:hidden schneidet mir auch den content ab sobald es etwas zum scrollen gibt. Mit einem zusätzlichen min-height: 100% und height: auto !important im wrapper funktioniert es zwar wieder, aber dann ist man wieder beim alten Problem das es im IE nicht tut. Jemand eine Idee wo das Problem liegt?
Peter Linke, am 05.05.2009 um 19:27
Bei mir funktioniert es nicht. Das overflow:hidden schneidet mir auch den content ab sobald es etwas zum scrollen gibt. Mit einem zusätzlichen min-height: 100% und height: auto !important im wrapper funktioniert es zwar wieder, aber dann ist man wieder beim alten Problem das es im IE nicht tut. Jemand eine Idee wo das Problem liegt?
Peter Linke, am 05.05.2009 um 19:31
Sorry für den Doppelpost, habe die Seite nur aktualisiert. Hier fehlt vermutlich eine Reloadsperre für das Script.
Peter Linke, am 06.05.2009 um 06:56
OK, habe es hinbekommen, im Wrapper darf keine Höhenangabe sein, Mindesthöhe muß man also anders regeln. Echt cool der Trick.
Nedim Sabic, am 17.09.2009 um 17:42
Vielen, vielen Dank, hat super funktioniert. Ich liebe Logik!!! :)
Roger P., am 17.11.2009 um 10:02
Will man den Mantel sowohl um Header als auch Footer fliessen lassen, wird der Footer im Firefox überdeckt.
Einfache Lösung: Man setze position:relative und z-index:1;

#fusszeile {
background-color: darkgreen;
border-top: 1px solid #000080;
padding: 0px;
width: 100%;
clear:both;

position:relative;
}
Roger P., am 17.11.2009 um 10:03
Nachtrag:
z-index:1 ist überflüssig.
Roger P., am 18.11.2009 um 21:35
Für maximale Browserkompatibilität:

http://www.positioniseverything.net/articles/onetruelayout/print
Roger P., am 18.11.2009 um 23:12
Für maximale Browserkompatibilität:

http://www.positioniseverything.net/articles/onetruelayout/print
Sevage, am 12.02.2010 um 10:51
Hi,
wollt auch mal meinen Dank ausdrücken. So einfach und so große Wirkung. Also danke für die Info.
Flo, am 07.03.2010 um 18:46
Ein einfacher, aber wirkungsvoller Trick. Hat bei mir ohne Probleme funktioniert.
Gibt es auch noch eine ähnlich einfache Lösung, damit die Seite mindestens 100% des Browserfensters groß ist?
Flo, am 07.03.2010 um 20:22
Ein einfacher, aber wirkungsvoller Trick. Hat bei mir ohne Probleme funktioniert.
Gibt es auch noch eine ähnlich einfache Lösung, damit die Seite mindestens 100% des Browserfensters groß ist?
Flo, am 07.03.2010 um 20:24
Habs doch noch hinbekommen. Dazu einfach in html, body und sämtliche wrapper die Höhe 100% eintragen und die Seite wird so hoch wie gewünscht.