<div style="float: left;">Left</div>
<div style="float: right;">Right</div>
<div style="clear: both; margin-top: 200px;">Main Data</div>
Pourquoi le margin:top
pour "Données principales" ne fonctionne-t-il pas dans le code ci-dessus?
Vous pouvez mettre les deux div flottantes dans une autre avec le "débordement: caché" set:
<div style='overflow:hidden'>
<div style="float: left;">Left</div>
<div style="float: right;">Right</div>
</div>
<div style="clear: both; margin-top: 200px;">Main Data</div>
edit - Pour ajouter quelque chose à cette réponse vieille de 5 ans: Je pense que la cause du comportement déroutant est le processus un peu compliqué de margin collapse . Une bonne astuce avec le code HTML d'origine de l'OP consiste à ajouter une règle CSS comme celle-ci:
div { border: 1px solid transparent; }
Pouf! Maintenant (sans mon <div>
supplémentaire) cela fonctionne très bien! Eh bien, sauf pour ce pixel supplémentaire des frontières. En particulier, je pense, c'est une combinaison de la façon dont fonctionne clear: both
et des règles de réduction de la marge qui entraînent une mise en page inattendue à partir du code de l'OP.
edit again - Pour l'histoire complète (et, je pense, parfaitement exacte), voir l'excellente réponse de Mark Amery . Les détails ont une certaine complexité que cette réponse passe sous silence.
Alors que Pointy montre comment vous pouvez envelopper les flottants dans un div, vous pouvez également insérer un div vide entre les flottants et la section de données principale. Par exemple:
<div style="float: left;">Left</div>
<div style="float: right;">Right</div>
<div style="clear: both;"></div>
<div style="margin-top: 200px;">Main Data</div>
Cela peut s'avérer utile dans les cas où l'ajout d'un wrapper div autour de certains codes HTML n'est pas souhaitable.
Pointy et Randall Cook ont d'excellentes réponses. Je pensais montrer une autre solution.
<div style="float: left;">Left</div>
<div style="float: right;">Right</div>
<div style="float: left; clear: both; margin-top: 200px;">Main Data</div>
Si vous faites le 3ème élément "float: left;" AND "clear: both;", cela devrait avoir pour effet de donner au 3ème élément une marge de 200 pixels. Voici un link à un exemple.
Cela pourrait également affecter d'autres éléments de suivi pour déterminer s'ils doivent être flottants ou non. Cependant, cela pourrait aussi avoir l'effet désiré.
Solution alternative:
Vous pouvez réellement mettre un
margin-bottom
sur les éléments flottants en Push DOWN l'élément en dessous qui aclear: both
.
Remarque: cette suggestion étant faite, je dois la retirer immédiatement car ce n’est généralement pas une bonne idée, mais dans certaines situations limitées, il peut être approprié;
<div class='order'>
<div class='address'>
<strong>Your order will be shipped to:</strong><br>
Simon</br>
123 Main St<br>
Anytown, CA, US
</div>
<div class='order-details'>
Item 1<br>
Item 2<br>
Item 3<br>
Item 4<br>
Item 5<br>
Item 6<br>
Item 7<br>
Item 8<br>
Item 9<br>
Item 10<br>
</div>
<div class='options'>
<button>Edit</button>
<button>Save</button>
</div>
</div>
Le panneau avec les éléments s'appelle order-details
avec ce css
.order-details
{
padding: .5em;
background: lightsteelblue;
float: left;
margin-left: 1em;
/* this margin does take effect */
margin-bottom: 1em;
}
Dans le violon ci-dessus - le panneau jaune a un margin-top
, mais s'il n'est pas plus grand que l'élément flottant le plus grand, il ne fera rien (c'est bien le but de cette question).
Si vous définissez le margin-top
du panneau jaune sur 20em, il sera visible car la marge est calculée à partir du haut de la zone bleue extérieure.
Utilisez plutôt 'padding-top' dans votre principale division de données. Ou, alternativement, encapsulez la principale division de données en une seule avec "padding-top".
Essayez de définir une marge inférieure sur l'un des éléments flottants. Sinon, vous pouvez envelopper les flottants dans un élément parent et utiliser un hack CSS pour le supprimer sans balise supplémentaire .
Parfois, une combinaison de position relative et de marge peut résoudre ce type de problèmes.
J'utilise cette technique pour mes classes alignright et alignleft dans WordPress.
Par exemple, si je veux une "marge inférieure" qui soit respectée en éliminant les éléments que vous pouvez utiliser.
.alignright{
float: right;
margin-left: 20px;
margin-top: 20px;
position: relative;
top: -20px;
}
Pour votre exemple, vous pourriez faire quelque chose comme
<div style="float: left;">Left</div>
<div style="float: right;">Right</div>
<div style="clear: both; margin-bottom: 200px; position: relative; top: 200px;">Main Data</div>