Je ne sais pas si c'est un problème commun, mais je ne parviens pas à trouver la solution sur le Web jusqu'à présent. Je voudrais avoir deux div emballés à l'intérieur d'une autre div, cependant ces deux divs à l'intérieur doivent être alignés au même niveau (par exemple: à gauche, 20% de la largeur du wrappedDiv, à droite, à 80%). Pour atteindre cet objectif, j'ai utilisé l'exemple CSS suivant. Cependant, maintenant, la DIV enveloppante n'a pas enveloppé tous les divs. La Div Wrap a une petite hauteur que ces deux div contenues à l'intérieur. Comment puis-je m'assurer que la division enveloppante a la plus grande hauteur en tant que divs contenue? Merci!!!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>liquid test</title>
<style type="text/css" media="screen">
body
{
margin: 0;
padding: 0;
height:100%;
}
#nav
{
float: left;
width: 25%;
height: 150px;
background-color: #999;
margin-bottom: 10px;
}
#content
{
float: left;
margin-left: 1%;
width: 65%;
height: 150px;
background-color: #999;
margin-bottom: 10px;
}
#wrap
{
background-color:#DDD;
height:100%;
}
</style>
</head>
<body>
<div id="wrap">
<h1>wrap1 </h1>
<div id="nav"></div>
<div id="content"><a href="index.htm">< Back to article</a></div>
</div>
</body>
</html>
C'est un problème courant lorsque vous avez deux flotteurs à l'intérieur d'un bloc. Le meilleur moyen de résoudre ce problème consiste à utiliser clear:both
après la seconde div
.
<div style="display: block; clear: both;"></div>
Cela devrait forcer le conteneur à avoir la bonne hauteur.
Mis à part le clear: both
hack, vous pouvez ignorer l’élément supplémentaire et utiliser overflow: hidden
sur l'emballage div
:
<div style="overflow: hidden;">
<div style="float: left;"></div>
<div style="float: left;"></div>
</div>
overflow:hidden
(comme mentionné par @Mikael S) ne fonctionne pas dans toutes les situations, mais devrait fonctionner dans la plupart des situations.
Une autre option consiste à utiliser le :after
tour:
<div class="wrapper">
<div class="col"></div>
<div class="col"></div>
</div>
.wrapper {
min-height: 1px; /* Required for IE7 */
}
.wrapper:after {
clear: both;
display: block;
height: 0;
overflow: hidden;
visibility: hidden;
content: ".";
font-size: 0;
}
.col {
display: inline;
float: left;
}
Et pour IE6:
.wrapper { height: 1px; }
Cela devrait le faire:
<div id="wrap">
<div id="nav"></div>
<div id="content"></div>
<div style="clear:both"></div>
</div>
Flottez tout.
Si vous avez un div
flottant à l'intérieur d'un div
non flottant, tout devient vicieux. C'est pourquoi la plupart des frameworks CSS tels que Blueprint et 960.gs utilisent tous des conteneurs flottants et divs
.
Pour répondre à votre question particulière,
<div class="container">
<!--
.container {
float: left;
width: 100%;
}
-->
<div class="sidebar">
<!--
.sidebar {
float: left;
width: 20%;
height: auto;
}
-->
</div>
<div class="content">
<!--
.sidebar {
float: left;
width: 20%;
height: auto;
}
-->
</div>
</div>
devrait bien fonctionner, aussi longtemps que vous float:left;
Tous vos <div>
s.
Utilisez ce hack CSS, cela m'a évité beaucoup de problèmes et de temps.
Je l'utilise dans chaque projet.
Ici, je vous montre un extrait où votre problème est résolu (je sais, cela fait trop longtemps que vous ne l'avez pas posté, mais je pense que cela est plus propre que la correction "claire")
#nav
{
float: left;
width: 25%;
height: 150px;
background-color: #999;
margin-bottom: 10px;
}
#content
{
float: left;
margin-left: 1%;
width: 65%;
height: 150px;
background-color: #999;
margin-bottom: 10px;
}
#wrap
{
background-color:#DDD;
overflow: hidden
}
<div id="wrap">
<h1>wrap1 </h1>
<div id="nav"></div>
<div id="content"><a href="index.htm">< Back to article</a></div>
</div>
En voici une autre, que j'ai trouvée utile. Cela fonctionne même pour le design Responsive CSS.
#wrap
{
display: table;
table-layout: fixed; /* it'll enable the div to be responsive */
width: 100%; /* as display table will shrink the div to content-wide */
}
ATTENTION: Mais cette théorie ne fonctionnera pas car son titulaire contient des éléments internes avec des positions absolues. Et cela créera un problème pour la mise en page à largeur fixe. Mais pour un design réactif, c'est simplement excellent. :)
Avec CSS3, dans une partie dynamique, vous pouvez ajouter un float clair au dernier élément en:
#wrap [class*='my-div-class']:last-of-type {
display: block;
clear: both;
}
Où sont vos divs:
<div id="wrap">
<?php for( $i = 0; $i < 3; $i++ ) {
<div class="my-div-class-<?php echo $i ?>>
<p>content</p>
</div> <!-- .my-div-class-<?php echo $i ?> -->
}
</div>
Référence:
HTML
<div id="wrapper">
<div id="nav"></div>
<div id="content"></div>
<div class="clearFloat"></div>
</div>
CSS
.clearFloat {
font-size: 0px;
line-height: 0px;
margin: 0px;
padding: 0px;
clear: both;
height: 0px;
}
À la place d'utiliser overflow:hidden
, qui est une sorte de bidouille, pourquoi ne pas simplement définir une hauteur fixe, par ex. height:500px
, à la division parente?
<html>
<head>
<style>
#main { border: 1px #000 solid; width: 600px; height: 400px; margin: auto;}
#one { width: 20%; height: 100%; background-color: blue; display: inline-block; }
#two { width: 80%; height: 100%; background-color: red; display: inline-block; }
</style>
</head>
<body>
<div id="main">
<span id="one">one</span><span id="two">two</span>
</div>
</body>
</html>
Le secret est le inline-block
. Si vous utilisez des bordures ou des marges, vous devrez peut-être réduire la largeur de la div qui les utilise.
NOTE: Cela ne fonctionne pas correctement dans IE6/7 si vous utilisez "DIV" au lieu de "SPAN". (voir http://www.quirksmode.org/css/display.html )