2012-08-28 2 views
11

Ich habe ein zweispaltiges Layout, Sidebar auf der linken Seite, Inhalt auf der rechten Seite.CSS Kind Clearing Eltern Float

Also ich schwebe die Seitenleiste links, und gebe dem Inhalt rechts einen Rand. Alles ist gut und gut ...

Bis, ein Kind Element des Inhalts hat eine klare angewendet, es springt unter der Seitenleiste.

Gibt es eine Möglichkeit, Kinderelement nur innerhalb des übergeordneten Containers freizugeben und zu löschen?

Als Bild ist 1000 Worte wert, hier ist ein JSFiddle:

http://jsfiddle.net/qRYYm/1/

+0

http://jsfiddle.net/qRYYm/2/ – Peter

+0

@PeterSzymkowski - haben Sie "Update" in der jsfiddle zuerst drücken? – ahren

+0

natürlich, sorry – Peter

Antwort

26

Wenn Sie overflow:auto;-.content hinzufügen, dass sehen soll Du hast recht.

+0

Perfekt. Könntest du ein wenig mehr erklären, warum das funktioniert? – ahren

+3

Das Problem besteht darin, dass sich DIV nicht auf die Höhe der höchsten Elemente erstreckt, wenn es floated Elemente enthält. Überlauf hinzufügen: Automatisch (oder ausgeblendet oder Bildlauf) bewirkt, dass es sich ausdehnt. Mehr Info hier: http://www.quirksmode.org/css/clearing.html –

+0

Nur neugierig, was ist der Standardwert von 'Überlauf' für einen DIV? – Justin

0

Was dazu:

aside{ 
    position: absolute; 
    height: 300px; 
    width: 100px; 
} 

http://jsfiddle.net/qRYYm/2/

+0

Das ist der Effekt, nach dem ich suche - aber ist es möglich, ohne absolute Positionierung zu verwenden? – ahren

0

Sie sollten vermeiden, klar zu verwenden. Sie können Überlauf verwenden: versteckt mit Hauptbehälter

<div class="content"> 
    <div class="one">One</div> 
    <div class="two">Two</div>  
</div> 

.content { float: left; overflow: hidden; width: 900px; } 
aside { float: left; width: 100px; } 

Außerdem sollen Sie nicht verwenden, um den margin-left: 100px den Inhalt weg von der linken Spalte zu schieben. Float beide nach links. Ich finde, dass die Spalten in einer Hauptverpackung sind. Es ist so gemütlicher.

+0

Floating beide links erlaubt es nicht der zweiten Spalte, die verbleibende Breite aufzunehmen ... dh; sei flexibel. – ahren

0

Sie können es auch so tun.

.left{float:left;} 
.right {float:right;} 
.clear{clear:both;} 

<div> 
    <div class="left">SideBar</div> 
    <div class="right"> 
      <div> 
       <div class="left">content 1</div> 
       <div class="left">content 2</div> 
       <div class="clear"></div> 
      </div> 
    </div> 
    <div class="clear"></div> 
</div> 

Wenn auf jedem div float Anwendung (en), legt sie in einem übergeordneten div und klar innerhalb derselben Mutter div

+0

dies wird '.right' nicht erlauben zu expandieren, um die verbleibende Breite zu übernehmen ... – ahren