2012-08-28 10 views
11

Mam układ dwukolumnowy, boczny pasek po lewej stronie, treść po prawej stronie.Pływający rodzic dziecka CSS sprzątający

Przesuwam więc pasek boczny w lewo i nadam zawartość po prawej stronie marginesu. Wszystko jest w porządku i dobrze ...

Do momentu, gdy element podrzędny treści zostanie wyraźnie zastosowany, przeskakuje poniżej paska bocznego.

Czy istnieje sposób, aby element dla dzieci był unoszony i czysty tylko w kontenerze nadrzędnym?

Ponieważ obraz jest wart 1000 słów, oto JSFiddle:

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

+0

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

+0

@PeterSzymkowski - prawda znaczy najpierw nacisnąć "Update" w jsfiddle? – ahren

+0

oczywiście, przepraszam – Peter

Odpowiedz

26

Jeśli dodać overflow:auto; do .content że powinien zobaczyć masz rację.

+0

Idealny. Czy możesz podać nieco więcej wyjaśnień, dlaczego tak działa? – ahren

+3

Problem polega na tym, że zawierające DIV nie będzie rozciągać się do wysokości najwyższych elementów, gdy zawiera elementy pływające. Dodanie przepełnienia: auto (lub ukryte lub przewiń) spowoduje jego rozwinięcie. Więcej informacji tutaj: http://www.quirksmode.org/css/clearing.html –

+0

Po prostu ciekawy, jaka jest domyślna wartość 'overflow' dla DIV? – Justin

0

Co o tym:

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

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

+0

To jest efekt, którego szukam - ale czy to możliwe bez użycia pozycjonowania absolutnego? – ahren

0

Powinieneś unikać używania clear. Można użyć overflow: hidden z pojemnika głównego

<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; } 

Ponadto, nie należy używać margin-left: 100px naciskać na zawartość od lewej kolumnie. Pływak obaj w lewo. Uważam, że kolumny lubią być w głównym opakowaniu. W ten sposób jest bardziej przytulnie.

+0

pływające po lewej stronie nie pozwala drugiej kolumnie na zajęcie pozostałej szerokości ... ie; bądź elastyczny. – ahren

0

Możesz to zrobić w ten sposób.

.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> 

Przy stosowaniu pływaka na każdym div (ów), umieścić je w div nadrzędnej i jasne w ciągu tego samego rodzica div

+0

to nie zezwoli na rozszerzenie '.right', aby zająć pozostałą szerokość ... – ahren

Powiązane problemy