Je veux mettre deux <div>
s côte à côte. La droite <div>
est d'environ 200 pixels; et la gauche <div>
doit remplir le reste de la largeur de l'écran? Comment puis-je faire ceci?
230
Vous pouvez utiliser flexbox pour disposer vos articles:
#parent {
display: flex;
}
#narrow {
width: 200px;
background: lightblue;
/* Just so it's visible */
}
#wide {
flex: 1;
/* Grow to rest of container */
background: lightgreen;
/* Just so it's visible */
}
<div id="parent">
<div id="wide">Wide (rest of width)</div>
<div id="narrow">Narrow (200px)</div>
</div>
Il s'agit simplement de gratter la surface de la flexbox. Flexbox peut faire des choses assez étonnantes.
Pour une prise en charge de navigateur plus ancienne, vous pouvez utiliser CSS float et une propriété width pour le résoudre.
#narrow {
float: right;
width: 200px;
background: lightblue;
}
#wide {
float: left;
width: calc(100% - 200px);
background: lightgreen;
}
<div id="parent">
<div id="wide">Wide (rest of width)</div>
<div id="narrow">Narrow (200px)</div>
</div>
float:left
? Votre commentaire à ma réponse dit que "la div lft est requise pour couvrir toute la zone gauche", mais lefloat:left
fera envelopper le contenu étroitement.Je ne sais pas si c'est toujours un problème actuel ou non, mais je viens de rencontrer le même problème et j'ai utilisé la
display: inline-block;
balise CSS . Envelopper ces derniers dans un div afin qu'ils puissent être positionnés de manière appropriée.Notez que l'utilisation de l'attribut de style en ligne n'a été utilisée que pour la brièveté de cet exemple, bien sûr, ceux-ci ont été déplacés vers un fichier CSS externe.
la source
width
propriété de tous mes 2 divs côte à côte pour éviter de placer le second sur une nouvelle ligne.Malheureusement, ce n'est pas une chose triviale à résoudre pour le cas général. La chose la plus simple serait d'ajouter une propriété de style css "float: right;" à votre div 200px, cependant, cela entraînerait également que votre division "principale" soit réellement pleine largeur et tout texte là-bas flotterait autour du bord de la division 200px, ce qui semble souvent bizarre, selon le contenu (à peu près dans tous les cas sauf si c'est une image flottante).
EDIT: Comme suggéré par Dom, le problème d'emballage pourrait bien sûr être résolu avec une marge. Que je suis bête.
la source
La méthode suggérée par @roe et @MohitNanda fonctionne, mais si le bon div est défini comme
float:right;
, alors il doit venir en premier dans la source HTML. Cela rompt l'ordre de lecture de gauche à droite, ce qui peut prêter à confusion si la page est affichée avec les styles désactivés. Si tel est le cas, il pourrait être préférable d'utiliser un div wrapper et un positionnement absolu:Démontré:
gauche droiteEdit: Hmm, intéressant. La fenêtre d'aperçu affiche les divs correctement formatés, mais pas l'élément de publication rendu. Désolé alors, vous devrez l'essayer par vous-même.
la source
J'ai rencontré ce problème aujourd'hui. Sur la base des solutions ci-dessus, cela a fonctionné pour moi:
Faites simplement diviser le parent sur toute la largeur et faire flotter les div contenus.
la source
METTRE À JOUR
Si vous devez placer des éléments sur une ligne, vous pouvez utiliser Flex Layout . Voici un autre tutoriel Flex . C'est un excellent outil CSS et même s'il n'est pas compatible à 100%, chaque jour son support s'améliore. Cela fonctionne aussi simplement que:
HTML
CSS
Et ce que vous obtenez ici est un conteneur d'une taille totale de 4 unités, qui partage l'espace avec ses enfants dans une relation de 1/4 et 3/4.
J'ai fait un exemple dans CodePen qui résout votre problème. J'espère que ça aide.
http://codepen.io/timbergus/pen/aOoQLR?editors=110
TRÈS VIEUX
C'est peut-être juste un non-sens, mais avez-vous essayé avec une table? Il n'utilise pas directement CSS pour positionner les divs, mais cela fonctionne très bien.
Vous pouvez créer une table 1x2 et mettre votre
divs
intérieur, puis mettre en forme la table avec CSS pour les mettre comme vous le souhaitez:Remarque
Si vous voulez éviter d'utiliser le tableau, comme dit précédemment, vous pouvez utiliser
float: left;
etfloat: right;
et dans l'élément suivant, n'oubliez pas d'ajouter unclear: left;
,clear: right;
ouclear: both;
afin d'avoir la position nettoyée.la source
Cela fonctionnera bien tant que vous définissez
clear: both
l'élément qui sépare ce bloc de deux colonnes.la source
J'ai rencontré le même problème et la version Mohits fonctionne. Si vous souhaitez conserver votre ordre gauche-droite dans le html, essayez simplement ceci. Dans mon cas, le div gauche ajuste la taille, le div droit reste à la largeur 260px.
HTML
CSS
L'astuce consiste à utiliser un remplissage à droite sur la boîte principale, mais à utiliser à nouveau cet espace en plaçant à nouveau la boîte de droite avec marge-droite.
la source
J'utilise un mélange de float et overflow-x: hidden. Code minimal, fonctionne toujours.
https://jsfiddle.net/9934sc4d/4/ - PLUS vous n'avez pas besoin d'effacer votre flotteur!
la source
Comme tout le monde l'a souligné, vous le ferez en définissant un
float:right;
sur le contenu RHS et une marge négative sur le LHS.Cependant .. si vous n'utilisez pas un
float: left;
sur le LHS (comme Mohit le fait), vous obtiendrez un effet de progression car le div LHS va toujours consommer l'espace marginal dans la mise en page.Cependant .. le flottant LHS rétrécira le contenu, vous devrez donc insérer un nœud enfant de largeur définie si ce n'est pas acceptable, à quel moment vous pourriez aussi bien avoir défini la largeur sur le parent.
Cependant .. comme le souligne David, vous pouvez modifier l'ordre de lecture du balisage pour éviter l'exigence de flotteur LHS, mais cela présente des problèmes de lisibilité et éventuellement d'accessibilité.
Cependant .. ce problème peut être résolu avec des flotteurs étant donné un balisage supplémentaire
(mise en garde: je n'approuve pas la division .clearing dans cet exemple, voir ici pour plus de détails)
Tout bien considéré, je pense que la plupart d'entre nous souhaiteraient qu'il y ait une largeur non gourmande: rester dans CSS3 ...
la source
Ce ne sera pas la réponse pour tout le monde, car il n'est pas pris en charge dans IE7-, mais vous pouvez l'utiliser et utiliser une autre réponse pour IE7-. Il s'agit de display: table, display: table-row et display: table-cell. Notez que cela n'utilise pas de tableaux pour la mise en page, mais le style divs afin que les choses s'alignent bien avec tous les tracas d'en haut. Le mien est une application html5, donc cela fonctionne très bien.
Cet article montre un exemple: http://www.sitepoint.com/table-based-layout-is-the-next-big-thing/
Voici à quoi ressemblera votre feuille de style:
la source
Pour paraphraser un de mes sites Web qui fait quelque chose de similaire:
la source
utilisez simplement un z-index et tout ira bien. assurez-vous d'avoir des positions marquées comme fixes ou absolues. alors rien ne bougera comme avec une balise flottante.
la source