Split largeur disponible entre les deux divs
J'ai un conteneur (largeur n'est pas connu) contenant quatre vrd, comme suit:
| Div1 | Div2 ............... | .............. Div3 | Div4 |
Le plus à gauche et le plus à droite de la vrd (Div1/Div4) sont de largeur fixe; c'est la partie facile.
La largeur de Div2/Div3 n'est pas connu, et je voudrais éviter de mettre une largeur fixe pour eux, car selon le contenu, on peut être beaucoup plus large que les autres (donc je ne peux pas juste par exemple, ont chacun 50% de l'espace disponible)
Je voudrais la largeur de Div2/Div3 être calculée automatiquement par le navigateur, puis s'il reste de l'espace à gauche, il doit s'étirer pour remplir tout l'espace restant (il n'a pas d'importance comment le reste de l'espace est divisé entre Div2/Div3)
La façon dont je me rapproche de ce droit est maintenant:
- Div1 flottait à gauche (ou en position absolue)
- Div4 flottait à droite (ou en position absolue)
- Div2 a une marge à gauche égale à la largeur de la Div1 (connu)
- Div3 a une marge à droite égale à la largeur de Div4 (connu)
Ma question est, comment faire pour avoir Div2 et Div3 étirer pour remplir le solde disponible, la largeur? Je suppose qu'une option serait d'utiliser display: table, et une autre possibilité serait flex-zone. Existe-il des alternatives?
Mise à jour: Édité pour plus de clarté.
Mise à jour 2: Veuillez noter que je ne peut pas supposer que Div2 et Div3 devez obtenir 50% de l'espace disponible. Ceci est explicitement mentionné dans la question mais de toute façon, je reçois des réponses sur la base de cette hypothèse.
Les Tables sont en effet une solution. Je me demandais simplement si il y a des alternatives.
display:table
/ table-row
/ table-cell
pour le sauvetage?pourrait sans aucun doute aller pour les flexbox avec un repli ou CSS table.
Pouvez-vous utiliser le CSS3?
OriginalL'auteur Grodriguez | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Faire usage de
overflow:hidden
(ou overflow:auto - tant que le dépassement n'est pas visible [par défaut]) pour déclencherblock formatting contexts
pour remplir largeur restante(J'ai supposé fixe la largeur de 100px pour div1 et div4)
VIOLON
Balisage
CSS
Alors que nous sommes à ce, pourquoi est-overflow:hidden nécessaire? Semble fonctionner tout de même avec overflow:auto...
J'ai mis à jour votre violon avec max-width:80% et min-width:20% sur div2. div3 remplit le reste de la largeur horizontale. max-width démo & min-width démo . Remarque: Votre question initiale ne précise pas ce qui doit être fait si div2 contient des charges de contenu ou pas de contenu du tout ... mon min/max largeurs sont des estimations 🙂
Aussi, j'ai édité ma réponse à inclure le fait que overflow:auto déclenche également un bloc de mise en forme de contexte
Je suis d'accepter cette réponse comme il est le seul qui donne une solution alternative, outre les deux options que je l'ai déjà mentionné dans la question. Merci!!!!
OriginalL'auteur Danield
Je suis venu avec 3 solutions différentes pour obtenir la bonne largeur:
Les cellules d'un tableau:
Grille flexible:
Box-sizing conteneur:
La dernière solution utilise la balise html et aligne les éléments verticalement à l'aide de positionnement relatif (signifie que vous devez avoir hauteurs fixes).
Je vous suggère d'utiliser la première solution, car elle est de plus compatible avec les anciens navigateurs, il est simple à mettre en œuvre et fonctionne très bien.
Démo: http://jsfiddle.net/R8mqR/9/embedded/result/
Fait de vrai. J'ai juste ajouté de la dernière solution pour montrer que la "largeur auto" peut être obtenue par le box-sizing approche, mais il ya certainement beaucoup de problèmes avec elle.
Désolé, mais je ne les suivez pas. Dans les solutions 1 et 2, la largeur de div2 et div3 s'adapte au contenu, comme vous le souhaitez. Dans la "solution" 3, la largeur de la div2 et div3 est fixée à 50%. Comment est-ce que "auto largeur"?
Comme vous pouvez le voir dans la mise à jour du violon, les 3 solutions travaillent dans une manière très similaire. Mais vous avez entièrement raison à propos de l'adaptation, la largeur n'est pas "automatique".
OriginalL'auteur rafaelcastrocouto
Voici une solution à l'aide de display:table sans l'aide de la table,tr,td, etc:
(VIOLON)
HTML
CSS
OriginalL'auteur fred02138
Vous pouvez envelopper le Div2 et la Div3 à l'intérieur d'un Div parent, et de définir la largeur de la Div2 et la Div3 à 50%.
Comme indiqué dans la question que j'aimerais éviter de réglage de la largeur de la div2/div3.
Vous avez raison, mais les balises div sont utilisés pour l'organisation ou stylistique applications. Et je ne sais pas un moyen de mélanger les pourcentages et valeurs absolues de la durée, sauf pour une largeur fixe.
Je n'ai pas mis leur valeur en px ou en d'une manière absolue. J'ai utilisé les pourcentages de 50%.
Je n'ai pas dit que je ne voulais pas utiliser de pixels, j'ai dit que je n'ai pas envie de mettre de la largeur. Je veux de la largeur pour div2/div3 être calculée automatiquement, puis étirée pour remplir tout l'espace restant (en fait à peu près la même chose qu'un tableau de mise en page le ferait)
OriginalL'auteur Mohsenme
Le calc ( http://caniuse.com/#search=calc ):
http://jsfiddle.net/coma/YPWcW/
Le rembourrage/position:
http://jsfiddle.net/coma/qqR4Z/
Vous pouvez utiliser min-largeur:
http://jsfiddle.net/coma/38KQt/2/
Comment est-ce exactement aider? Vous êtes toujours le fractionnement de la largeur disponible (100% - 200px) à parts égales entre Div2/Div3, j'ai explicitement dit que je ne peut pas le faire. Voir: jsfiddle.net/38KQt/1
Merci @putvande!
essayez les autres ensuite.
si vous avez besoin d'un minimum de largeur, il suffit d'ajouter min-largeur...
OriginalL'auteur coma
je pense qu'il est possible à l'aide de flex modèle de boîte en css3
Le code suivant fonctionne dans IE10,chrome,firefox,safari
Les styles sont:
OriginalL'auteur user2594152
Ma solution emprunte à d'autres qui ont été déjà posté, mais en testant, j'ai trouvé que le contenu dans les deux divs foiré avec la distribution de la largeur... leur permettrait de conserver la même largeur, aussi longtemps qu'ils avaient exactement le même contenu, mais serait inégalement large dès que l'on a obtenu plus de contenu.
Donc, dans ma solution, j'ai utilisé jQuery pour distribuer le reste de la largeur pour les deux centrales de la vrd, faire leur largeur, même au-delà des différences sur leur contenu.
Bonus #1:
jQuery n'a pas besoin de connaître la largeur de la gauche et la droite divs explicitement, comme il récupère quelle que soit la largeur a été défini par CSS.Bonus #2:
Facilement spécifier combien de centre de divs sont là et de partager le restant de la largeur de façon égale entre tous. Il suffit de changer le numéro de la largeur restante est divisé par.Voici un violon. Ci-dessous est la solution telle que publiée dans le violon, simplifié. Le violon montre de, plus en détail, les failles d'autres solutions lorsque le contenu est livré à la centrale divs.
Noter que le
js-
préfixe sur certaines classes est là parce que je l'ai utilisé pour séparer le javascript influence de balisage de la "normale". J'ai aussi gardé les journaux de la console dans le cas où vous souhaitez déboguer.Eh bien, maintenant je sais... 😀
OriginalL'auteur Wallace Sidhrée
OriginalL'auteur Ankit