2009-04-30 12 views
83

Voglio l'esterno div, che è nero per avvolgere i suoi div s galleggianti al suo interno. Non voglio usare style='height: 200px nello div con l'ID outerdiv perché voglio che sia automaticamente l'altezza del suo contenuto (ad esempio, il galleggiante div s).Fare div esterno è automaticamente la stessa altezza del suo contenuto flottante

<div id='outerdiv' style='border: 1px solid black;background-color: black;'> 
<div style='width=300px;border: red 1px dashed;float: left;'> 
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
</div> 

<div style='width=300px;border: red 1px dashed;float: right;'> 
    <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p> 
</div> 

Come raggiungere questo obiettivo?

risposta

151

È possibile impostare i CSS s' il outerdiv a questo

#outerdiv { 
    overflow: hidden; /* make sure this doesn't cause unexpected behaviour */ 
} 

È anche possibile fare questo con l'aggiunta di un elemento alla fine con clear: both. Questo può essere aggiunto normalmente, con JS (non una buona soluzione) o con :after pseudo elemento CSS (non ampiamente supportato in IE precedenti).

Il problema è che i contenitori non si espandono naturalmente per includere i bambini flottanti. Tieni presente che se utilizzi il primo esempio, se hai elementi figli al di fuori dell'elemento padre, saranno nascosti. Puoi anche usare 'auto' come valore della proprietà, ma invocherà barre di scorrimento se qualche elemento appare all'esterno.

Si può anche provare a flottare il contenitore genitore, ma a seconda del progetto, questo può essere impossibile/difficile.

+33

Vorrei aver capito la logica del perché l'overflow: opere nascoste in questo caso. – masteroleary

+2

Sì, speravo che non fosse solo io a pensare che fosse contro-intuitivo. alex? – regularmike

+0

@regularmike Ho letto una spiegazione una volta, terrò d'occhio e collegherò il link se lo trovo. – alex

7

Si consiglia di provare carri auto-chiusura, come indicato a http://www.sitepoint.com/simple-clearing-of-floats/

Quindi, forse, provare uno overflow: auto (di solito funziona), o overflow: hidden, come ha detto Alex.

+0

opere nascoste, ma hai ragione, funziona automaticamente quel qualcosa di meglio. Grazie. –

2

Prima di tutto non si utilizza width=300px che è un'impostazione di attributo per il tag non CSS, utilizzare invece width: 300px;.

Suggerirei di applicare la tecnica clearfix sullo #outerdiv. Clearfix è una soluzione generale per svuotare 2 div fluttuanti in modo che il div padre si espanda per accomodare i 2 div fluttuanti.

<div id='outerdiv' class='clearfix' style='width:600px; background-color: black;'> 
    <div style='width:300px; float: left;'> 
     <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
    </div> 

    <div style='width:300px; float: left;'> 
     <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p> 
    </div> 
</div> 

Ecco un example della vostra situazione e che cosa fa Clearfix per risolverlo.

14

In primo luogo, consiglio vivamente di eseguire lo stile CSS in un file CSS esterno, anziché eseguirlo in linea. È molto più semplice da mantenere e può essere più riutilizzabile utilizzando le classi.

Lavorare fuori la risposta di Alex (& clearfix di Garret) di "aggiungendo un elemento alla fine con clear: both", si può fare in questo modo:

<div id='outerdiv' style='border: 1px solid black; background-color: black;'> 
     <div style='width: 300px; border: red 1px dashed; float: left;'> 
      <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
     </div> 

     <div style='width: 300px; border: red 1px dashed; float: right;'> 
      <p>zzzzzzzzzzzzzzzzzzzzzzzzzzzzz</p> 
     </div> 
     <div style='clear:both;'></div> 
    </div> 

Questo funziona (ma come si può vedere in linea CSS non è così carino).

+0

Perché mi sono abbassato? Funziona, e ho giustamente riconosciuto che non era una soluzione carina. – Lycana

+1

Non sono sicuro, ho fatto +1 per riportarti a 0 almeno. Forse sei stato respinto perché non hai corretto il suo CSS errato ... cioè utilizzando il segno di uguale per impostare una proprietà CSS non è corretto. – alex

+0

abbastanza giusto. Apprezzo il +1 alex. Ho pensato che la mia dichiarazione fosse giusta. – Lycana

1

utilizzare jQuery:

Set Parent Altezza = Bambino offsetHeight.

$(document).ready(function() { 
    $(parent).css("height", $(child).attr("offsetHeight")); 
} 
+2

Overkill, quando puoi farlo solo con i CSS. – alex

+1

Con la mia risposta è possibile impostare l'altezza del genitore come altezza del bambino ma utilizzando l'overflow non stiamo cambiando l'altezza del genitore che creerà qualche problema se mostriamo i dati dopo il div padre. – Harpal

0

Usa clear: both;

ho trascorso più di una settimana cercando di capire questo fuori!

4

So che alcune persone mi odieranno, ma ho trovato display:table-cell per aiutare in questo caso.

È molto più pulito.

Problemi correlati