Je veux que le div
extérieur, qui est en noir, enveloppe son div
s flottant en son sein. Je ne veux pas utiliser style='height: 200px
dans div
avec le outerdiv
id comme je le veux automatiquement comme hauteur de son contenu (par exemple, le div
s flottant).
<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>
Comment y parvenir?
Vous pouvez définir le CSS de outerdiv
sur cette
#outerdiv {
overflow: hidden; /* make sure this doesn't cause unexpected behaviour */
}
Vous pouvez également le faire en ajoutant un élément à la fin avec clear: both
. Ceci peut être ajouté normalement, avec JS (pas une bonne solution) ou avec :after
Pseudo-élément CSS (peu pris en charge par les anciens IE).
Le problème est que les conteneurs ne se développeront pas naturellement pour inclure les enfants flottants. Soyez averti en utilisant le premier exemple, si vous avez des éléments enfants en dehors de l'élément parent, ils seront masqués. Vous pouvez également utiliser "auto" comme valeur de propriété, mais cela appellera des barres de défilement si un élément apparaît à l'extérieur.
Vous pouvez également essayer de faire flotter le conteneur parent, mais selon votre conception, cela peut être impossible/difficile.
Tout d'abord, je vous recommande fortement de faire votre style CSS dans un fichier CSS externe, plutôt que de le faire en ligne. C'est beaucoup plus facile à maintenir et peut être plus réutilisable en utilisant des classes.
En travaillant sur la réponse d'Alex (& clearfix de Garret): "ajouter un élément à la fin avec clear: both", vous pouvez le faire comme suit:
<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>
Cela fonctionne (mais comme vous pouvez le voir, CSS en ligne n'est pas si joli).
Vous voudrez peut-être essayer des flotteurs à fermeture automatique, comme indiqué en détail sur http://www.sitepoint.com/simple-clearing-of-floats/
Alors peut-être essayer soit overflow: auto
(fonctionne habituellement), ou overflow: hidden
, comme disait Alex.
Je sais que certaines personnes vont me détester, mais j'ai trouvé display:table-cell
pour aider dans ce cas.
C'est vraiment plus propre.
Tout d'abord, vous n'utilisez pas width=300px
c'est un paramètre d'attribut pour la balise, pas CSS, utilisez width: 300px;
au lieu.
Je suggérerais d'appliquer la technique clearfix
sur le #outerdiv
. Clearfix est une solution générale pour supprimer 2 divs flottantes afin que la division parent s'agrandisse pour accueillir les 2 divs flottantes.
<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>
Voici un exemple de votre situation et de ce que Clearfix fait pour la résoudre.
Utilisez jQuery:
Définir la hauteur du parent = Enfant offsetHeight.
$(document).ready(function() {
$(parent).css("height", $(child).attr("offsetHeight"));
}
Utilisation clear: both;
J'ai passé plus d'une semaine à essayer de comprendre cela!