CSS 2-Spalten-Layout, div soll vorgegebene Höhe ausnutzen

datommy

Newbie
Registriert
Aug. 2005
Beiträge
6
Hallo zusammen,

folgendes Problem: bei zwei nebeneinander liegenden DIVs in einem wrapper (links die Navigation, rechts der Inhalt), soll der eine DIV die restliche Höhe im wrapper ausnutzen, welche der andere DIV durch seinen Inhalt an Höhe vorgibt.
Zur besseren Vorstellung ein Bildchen und der passende Code:

test.JPG

HTML:
<html>
    
   <head>
      <style type="text/css">
         body {
            margin: 15px;
         }
         .wrapper {
            width: 100%;
            margin: 0 auto;
         }
         nav {
            float: left;
            width: 200px; 
            background-color: #98fb98;
         }
         header {
            float: left;
            width: 100%;
            background-color: #f4f4f4
         }
         article {
            margin-left: 202px;
            background-color: #afeeee;
         }
         footer {
            float: left;
            width: 100%;
            background-color: #f4f4f4;
         }
      </style>
   </head>
		
   <body>
      <div class="wrapper">
         <header>
            Header
         </header> 
			
         <nav>
            Navigation
         </nav> 
			
         <article>
            Inhalt<br>
            Inhalt<br>
            Inhalt<br>
            Inhalt
         </article>
			
         <footer>
            Footer
         </footer>     
      </div>
   </body>
    
</html>

Ich bekomme es einfach nicht hin! Wie lässt sich es sich realisieren, dass die Navigation die mögliche Höhe ausnutzt? Ist das überhaupt möglich ohne Java Script?

Vielen Dank im Voraus für eure Hilfe!
 
nein ist nicht möglich mit CSS, eine Lösung mit Javascript ist zwar möglich aber nicht zu empfehlen.

Du könntest aber ein (Wrapper)-Div um die Navigation und um den Inhalt herum machen. Falls Du ein Hintergrundbild bei der Navigation brauchst, gibst das dem Wrapper-Div mit background-position left und repeat-y.
 
Lawnmower schrieb:
nein ist nicht möglich mit CSS, eine Lösung mit Javascript ist zwar möglich aber nicht zu empfehlen.
Öhm... falsch.
Mir fallen spontan sogar 2 Ansätze ein:
1.) wenn man auf alte Mistkrücken Rücksicht nehmen will/muss, dann setzt man einfach auf das YAML CSS Framework. Das beherrscht identische Spaltenhöhen.
2.) Wenn man CSS3 zur Gänze ausnutzen kann: display: flex; sei mal als Tip genannt
 
ja das mag sein aber er hat jez vermutlich nicht das YAML Framework am Start und flex wird afaik erst ab IE10 (und da nur mit prefix) und in anderen Browsern nur mit prefix unterstützt.
 
Zuletzt bearbeitet:
Danke für die Tips!

Ich werde mir das mit den felx-boxen mal genauer anschauen. Lawnmower, dein Vorschlag hat mich auf eine gute work-around Idee gebracht.
Werde direkt mal weiter basteln ;)
 
Lawnmower schrieb:
ja das mag sein aber er hat jez vermutlich nicht das YAML Framework am Start und flex wird afaik erst ab IE10 (und da nur mit prefix) und in anderen Browsern nur mit prefix unterstützt.
Ab Chrome 29 und FF 22 geht Flex ohne Präfix, und mit IE9 muss man genauso viel Mitleid haben wie mit IE<=8...

Außerdem: wie ich sagte, es waren nur 2 schnelle Ideen. Man kann sowas auch über display:table / table-cell / table-row lösen. Hier pisst man nur IE<=7 ans Bein, und DARAUF muss man nun wirklich keine Rücksicht mehr nehmen.

Überhaupt: Keine Rücksicht auf Microsoft. Wenn die so beknackt sind, ihre schrottigen proprietären Browser jeweils nur für die allerneuste OS-Generation zu veröffentlichen, dann sind sie selbst schuld, wenn man mit modernem CSS die Besucher der Seite dazu zwingt, auf standardkonforme, quelloffene Browser zurückzugreifen.
 
IE10 unterstützt Flexbox... aber nur mit -ms - Präfix. Daran soll es aber wohl nicht liegen.
 
palace4d schrieb:
Was anderes habe ich nicht behauptet...
Du behauptest, es geht nicht. Ich sage: es geht, wenn man das -ms - Präfix verwendet. Da man bei den meisten CSS3-Effekten aber alle Präfix-Versionen mit angeben sollte, heißt "mit Präfix" im Endeffekt nur "es geht".

blond schrieb:
So.... und jetzt mach das mal mit nem Liquid Layout, bei dem die Spaltenbreiten komplett flexibel sind. Zusätzliche Herausforderung: Positioniere in der linken Spalte ein Element absolut am Boden.

"display:table / table-cell" ist, nach dem Flexbox-Modell, die beste Lösung.
 
Da steht doch, dass es mit dem MS-Präfix funktioniert...
Und ganz ehrlich, bei der Browseruntersützung würde ich es einsetzen.
 

Anhänge

  • capture.PNG
    capture.PNG
    3 KB · Aufrufe: 149
Da steht doch, dass es mit dem MS-Präfix funktioniert...
Aber nicht unter Version 10... d.h 10 geht und 9 nicht...
 
Ah ja... "unter" wie "<"... ja, für IE<=9 gehts nicht.
Normalerweise bedeutet "unter" ja eher "unter diesen Umständen", z.B. wie in "unter Windows" oder "unter OpenGL statt DirectX"...

Im Endeffekt aber auch kein Problem: Modernizr laufen lassen und gucken, ob Flex geht. IE<=9 kriegen halt keine gleichhohen Spalten, sondern ne Warnmeldung, dass sie veraltet sind. Ende Gelände.
 
Daaron schrieb:
Du behauptest, es geht nicht. Ich sage: es geht, wenn man das -ms - Präfix verwendet. Da man bei den meisten CSS3-Effekten aber alle Präfix-Versionen mit angeben sollte, heißt "mit Präfix" im Endeffekt nur "es geht".


So.... und jetzt mach das mal mit nem Liquid Layout, bei dem die Spaltenbreiten komplett flexibel sind.

Hier mal schnell ein Beispiel, du Dummschwätzer (um mal deine hier übliche Wortwahl zu benutzen): http://codepen.io/anon/pen/eJnor
 
Zuletzt bearbeitet von einem Moderator:
Mag für den Fall noch funktionieren, scheitert aber bei dem Fall, dass du ein Element in der Spalte am Boden positionieren willst.

Außerdem: Dein Ansatz funktioniert nicht im IE7 (kann keine Pseudo-Elemente), und für IE8+ kannst du genauso einen display:table/table-cell - Ansatz wählen, der diese Einschränkung nicht hat.
 
Zurück
Oben