Je me demande quelle est la meilleure façon de s'y prendre ...
J'ai 3 div
s:
un div#container
avec width=100%;
qui contient 2 div
s intérieure
un div#inner_left
avec width
changeant dynamiquement, mais pas plus large que 200px (tiendra une image de produit)
un div#inner_right
où la largeur doit remplir le reste de l'espace dans le conteneur (contiendra du texte pour décrire le produit montré)
#container {
width:100%
}
#inner_left {
display:inline-block:
max-width:200px;
}
#inner_right {
display:inline-block;
width:100%;
}
Le problème est que le div#inner_right
crée un saut de ligne et occupe toute la largeur. Comment puis-je les aligner côte à côte, avec la droite div
représentant la largeur prise par la gauche div
(qui change dynamiquement?). J'ai réussi à trouver d'autres solutions, mais je cherche une solution propre ...
Toute aide pour un CSS noob est très appréciée!
Jetez un oeil à " layouts liquid ", il peut décrire ce dont vous parlez.
Vous cherchez probablement celui-ci .
Dans votre exemple, essayez de définir votre affichage en ligne. Cependant, techniquement, vous ne pourrez pas utiliser d'éléments de niveau bloc, regardez donc les liens que j'ai postés ci-dessus. :)
Le problème de la définition de la largeur à 100% si vous utilisez des éléments flottants est qu’il est considéré comme représentant 100% du conteneur. Par conséquent, cela ne fonctionnera pas non plus, car la valeur 100% inclut la largeur du div de gauche.
Edit: Here est l'exemple de l'autre réponse, je l'ai modifiée pour inclure le code html/css de l'exemple de site ci-dessus par souci de simplicité.
Je vais aussi l'inclure ci-dessous:
HTML
<div id="contentwrapper">
<div id="contentcolumn">
<div class="innertube"><b>Content Column: <em>Fluid</em></b></div>
</div>
</div>
<div id="leftcolumn">
<div class="innertube"><b>Left Column: <em>200px</em></b></div>
</div>
CSS
#contentwrapper{
float: left;
width: 100%;
}
#contentcolumn{
margin-left: 200px; /*Set left margin to LeftColumnWidth*/
}
#leftcolumn{
float: left;
width: 200px; /*Width of left column*/
margin-left: -100%;
background: #C8FC98;
}
Je n'ai pas vraiment vu une bonne solution dans les réponses ici. Donc, je vais partager le mien.
La meilleure façon de procéder consiste à utiliser l'option table-cell
en CSS. Une chose importante à ajouter est une «largeur minimale» à l'élément qui a une largeur en pixels.
Exemple:
<div id="left">
Left
</div>
<div id="right">
right
</div>
CSS:
#left {
display: table-cell;
min-width: 160px;
}
#right {
display: table-cell;
width: 100%;
vertical-align: top;
}
Ceci peut être accompli en utilisant Flex-Box, qui a été introduit avec CSS3 et selon Puis-je utiliser est multi-navigateur.
.container {
display: flex;
}
.left {
width: 100px; /* or leave it undefined */
}
.right {
flex-grow: 1;
}
/* some styling */
.container {height: 90vh}
.left {background: gray}
.right {background: red}
<div class="container">
<div class="left">100px</div>
<div class="right">Rest</div>
</div>
Donc, même si je voulais faire cela avec CSS uniquement, j'ai fini par utiliser uniquement des tableaux ...
Utilisez flottant:
#container{
width:100%
}
#inner_left{
float:left;
max-width:200px;
}
#inner_right{
float:left;
width:100%;
}
Edit: lisez ceci, c’est un joli petit guide: quirksmode
Ceci est basé sur la réponse de @ w00. +1 ami.
Ma situation était lorsque je voulais montrer quelques icônes à côté d'une étiquette. J'utilise la classe fluid pour ce qui est l'endroit où le nowrap entre en jeu. C'est pour que les icônes apparaissent sur la même ligne.
.sidebyside-left-fixed, .sidebyside-right-fixed
{
display: table-cell;
width: 100%;
}
.sidebyside-left-fluid , .sidebyside-right-fluid
{
display: table-cell;
vertical-align: top;
white-space: nowrap;
}
Voici une méthode facile pour y parvenir, et c'est quelque chose qui est assez souvent nécessaire. Il a également été testé pour fonctionner avec tous les navigateurs, y compris les très anciens (laissez-moi savoir si ce n'est le cas sur aucun).
Lien vers un échantillon: https://jsfiddle.net/collinsethans/jdgduw6a/
Voici la partie HTML:
<div class="wrapper">
<div class="left">
Left Box
</div>
<div class="right">
Right Box
</div>
</div>
Et le SCSS correspondant:
.wrapper {
position: relative;
}
$left_width: 200px;
.left {
position: absolute;
left: 0px;
width: $left_width;
}
.right {
margin-left: $left_width;
}
Si vous n'utilisez pas de pré-processeur CSS, remplacez le $ left_width par votre valeur (200px ici).
Crédit: Ceci est basé sur http://htmldog.com/examples/pagelayout2/ . Il en existe plusieurs autres utiles.
vous devez fournir position: style absolu à la fois à votre div