La réponse de @Boushley était la plus proche, mais il y a un problème qui n'a pas été abordé et qui a été souligné. Il y a cependant un problème qui n'a pas été abordé et qui a été souligné. droit prend toute la largeur du navigateur ; le contenu prend la largeur prévue. Pour mieux comprendre ce problème :
<html>
<head>
<style type="text/css">
* { margin: 0; padding: 0; }
body {
height: 100%;
}
#left {
opacity: 0;
height: inherit;
float: left;
width: 180px;
background: green;
}
#right {
height: inherit;
background: orange;
}
table {
width: 100%;
background: red;
}
</style>
</head>
<body>
<div id="left">
<p>Left</p>
</div>
<div id="right">
<table><tr><td>Hello, World!</td></tr></table>
</div>
</body>
</html>
http://jsfiddle.net/79hpS/
Le contenu est à la bonne place (dans Firefox), mais la largeur est incorrecte. Lorsque les éléments enfants commencent à hériter de la largeur (par exemple, le tableau avec width: 100%
), elles ont une largeur égale à celle du navigateur, ce qui les fait déborder sur la droite de la page et crée une barre de défilement horizontale (dans Firefox) ou ne pas flotter et être repoussées vers le bas (dans chrome).
Vous pouvez corriger cela facilement en ajoutant overflow: hidden
dans la colonne de droite. Vous obtiendrez ainsi une largeur correcte pour le contenu et la div. En outre, le tableau recevra la largeur correcte et remplira la largeur restante disponible.
J'ai essayé certaines des autres solutions ci-dessus, mais elles ne fonctionnaient pas complètement dans certains cas et étaient tout simplement trop compliquées pour justifier de les corriger. Cette solution fonctionne et elle est simple.
Si vous avez des problèmes ou des préoccupations, n'hésitez pas à les soulever.
12 votes
Supprimez les propriétés width et float du #navigation et cela fonctionnera.
0 votes
Apparenté stackoverflow.com/questions/4873832/
2 votes
@alexchenco : vous devriez peut-être mettre à jour la réponse que vous avez choisie avec celle fournie par Hank.
0 votes
@AdrienBe en fait si vous regardez la réponse de mystrdat je pense que celle-ci est encore meilleure. Il n'y a qu'une ligne de css et c'est la seule qui a fonctionné pour moi (je fais trois colonnes avec float:left ; sur les deux premières avec des largeurs fixes et overflow:auto sur la dernière et ça marche très bien).
0 votes
@edwardtyl assez juste. En fait, cela semble utiliser une technique similaire à la réponse que j'ai fournie pour stackoverflow.com/questions/4873832/
0 votes
Consultez ma réponse quelques lignes plus bas. La réponse consiste à combiner
float: left
yoverflow hidden
. Vous obtiendrez ainsi un véritable comportement de "remplissage de l'espace restant" pour la colonne de droite.0 votes
En 2018,
flex
est souvent la meilleure solution. Voir la réponse de @Jordan ci-dessous - stackoverflow.com/a/25117686/846727