2011-10-02 5 views
3

J'ai eu des difficultés à créer des DIVs parents qui entourent les DIVs enfants flottants.Faire DIV parent ensacher flottant DIVs chid

<div id="parent"> 
    <div class="child1">content</div>  
    <div class="child2">content</div> 
    <div class="child3">taller content</div> 
</div> 

... où #parent élargirait verticalement (avec un rembourrage si elle était de style de cette façon) pour accueillir .child3. Si j'ajouté une bordure autour #parent il engloberait les trois DIVs enfants.

Quelle est la meilleure façon de styliser cet arrangement pour assurer ce comportement?

Vous cherchez la meilleure pratique.

+0

Utilisez-vous 'clear'? –

+0

Bhesh, je nettoie chaque nouvelle div parent, comme je suis en train d'empiler divs une la page: une pour la nav une pour le curseur, puis une autre pour trois colonnes de contenu, puis une autre pour plus de contenu. Mais quand je fais cela et essaie d'afficher une bordure supérieure et inférieure, je vois que le parent ne s'étend pas pour couvrir les divs enfants. – jw60660

Répondre

4

Vous pouvez ajouter un div "wrapper" dans le parent, et un élément "clear: both" dans le parent. Cochez cette jsFiddle http://jsfiddle.net/yvVP8/

<div id="parent"> 
    <div id="wrapper"> 
     <div class="child1">content</div> 
     <div class="child2">content</div> 
     <div class="child3">taller content lala lala lalal lala</div> 
    </div> 
    <div class="clear"></div> 
</div> 

Et le css:

#parent { 
    border: 1px solid #000; 
    width: 300px; 
} 

#wrapper .child1, #wrapper .child2, #wrapper .child3 { 
    float: left; 
    padding: 5px; 
    width: 90px; 
} 

div.clear { 
    clear: both; 
} 
+5

La div supplémentaire '# wrapper' n'est pas nécessaire, vous pouvez utiliser le pseudo-élément': after' et styliser cet élément. '#parent: après {content: ''; bloc de visualisation; clear: both;} ' –

+0

Correct, mais': after' n'est pas supporté dans IE7 et plus tôt. Si ce n'est pas un problème, alors ': after' est tout aussi bien (ou même mieux). [Source] (http://www.quirksmode.org/css/contents.html#t15) – oal

+0

Merci les gars. Question rapide: les divs supplémentaires, les gens disent toujours éviter trop de divs dans votre balisage. Mais il semble nécessaire d'obtenir ce que je recherche, à moins que je ne prenne une chance de casser les mises en page sur IE7 et les navigateurs précédents. Est-ce un gros problème d'avoir quelques divs supplémentaires par page? – jw60660

1

Vous pouvez simplement ajouter float:left; à la div parente.

Il devrait forcer la taille/bordure du parent à envelopper tous les frères et sœurs. Je ne sais pas si c'est valide, mais ça marche pour moi.