2012-03-29 6 views
1

Ich habe eine Testseite hier mit zwei Spalten, beide mit absoluter Positionierung.Wie gebe ich eine div volle Höhe in CSS

http://dl.dropbox.com/u/17844821/zeug/heighttest.html

Wie Sie sehen können, hat die linke Spalte mehr Inhalt als die rechte, so dass Bildlaufleisten verursachen. Da ich möchte, dass die rechte Spalte die gleiche Höhe wie die linke erhält, gab ich sie height: 100% CSS-Eigenschaft.

Jetzt scrollen Sie nach unten und Sie werden sehen, was passiert. Die rechte Spalte erweitert sich auf 100% der Höhe des Browserfensters und nicht auf 100% der gesamten Website.

Wie kann ich beiden Divs 100% volle Höhe geben? (Bereits versucht bottom: 0; für das Recht div wird nicht funktionieren..)

Hinweis: .wrapper muss bleiben mit position: absolute, da es eine Voraussetzung für meine ursprüngliche ganze Website-Layout ist.

+0

Sie sollten Schwimmer statt absolute Positionierung verwenden. –

+0

@Diodeus Ok, also hier ist eine Floated-Version. http://dl.dropbox.com/u/17844821/zeug/heighttest2.html - Immer noch das gleiche Problem. – Timo

Antwort

1

Nur dies:

body { overflow:auto; margin:0; } 
.wrapper { display:table; width:100%; } 
.left, .right { display:table-cell; width:50%; } 
+0

Danke Jan, das sieht nach einer wirklich eleganten Lösung aus, aber was ist, wenn ich .wrapper absolut positionieren muss? Wenn meine Web-App startet, verwende ich 'top: -100%', um sie zu verbergen. Nachdem ich auf einen Link geklickt habe, verwende ich jQuery, um 'top: 0' zu setzen, um es über einen Animationsübergang einzufügen. – Timo

+1

Verwenden Sie die Deckkraft, um Elemente auszublenden, es ist besser. Wenn Sie wirklich absolut benötigen, tun Sie es einfach in jQuery $ ('. Left, .right'). Height (Math.max ($ ('. Left) .height(), $ ('. Right '). Height() , $ (Fenster) .height())); –

1

Sie brauchen nicht wirklich "Wrapper", aber wenn Sie es lassen, müssen Sie es auch 100% Höhe machen.

html, body{ 
    height: 100%; 
} 

body{ 
    overflow: hidden; 
} 

.red{ 
    background: red; 
} 

.blue{ 
    background: blue; 
} 

.wrapper{ 
height:100% 
} 

.left{ 
    float: left; 
    width: 50%; 
    height:100%; 
} 

.right{ 
    float: right; 
    height: 100%; 
    width: 50%; 
} 
+0

Versucht. Hat nicht funktioniert. – Timo

0

Sie können diese Tabellen erreichen. Obwohl ich realisiere, dass manche Leute Tabellen für etwas anderes als Datendarstellung verachten.

Siehe dabblet zum Beispiel: http://dabblet.com/gist/2238394

CSS

.red{ 
    background: red; 
} 

.blue{ 
    background: blue; 
} 

.wrapper{ 
    overflow: auto; 
    width:100%; 
} 
td{ 
    vertical-align:top; 
} 

HTML

<table class="wrapper"> 
    <tr> 
     <td class="red"> 
      foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo 
     </td> 
     <td class="blue"> 
      foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo<br>bar<br>foo<br>foo 
     </td> 
    </tr> 
</table> 
+0

Downvoter Pflege Kommentar? – Khan

+0

Ich habe nicht abgelehnt, aber ich würde zustimmen, dass die Verwendung von Tabellen keine gute Idee für die Erstellung eines Website-Layouts ist, weil Semantik fehlt ("Eine Tabelle ist eine Tabelle ist eine Tabelle ist eine Tabelle"). Die Verwendung von divs mit 'display: table' und' display: table-cell' sollte wahrscheinlich der Weg sein, das gleiche Ergebnis zu erzielen, obwohl ich immer noch mein Layout mit diesen css-Attributen teste. – Timo

+0

Richtig, daher der Kommentar, den ich in meiner Antwort gemacht habe. Aber ich verstehe immer noch nicht, warum das einen Downvote verdient hat. – Khan