Je veux une disposition div à deux colonnes, où chacune peut avoir une largeur variable, par exemple
div {
float: left;
}
.second {
background: #ccc;
}
<div>Tree</div>
<div class="second">View</div>
Je veux que le div «view» s'étende sur toute la largeur disponible après que le div «tree» ait rempli l'espace nécessaire.
Actuellement, ma div «view» est redimensionnée au contenu qu'elle contient. Ce sera également bien si les deux div occupent toute la hauteur.
Clause de non-responsabilité:
- Développez div à la largeur maximale lorsque float: left est défini parce que celui de gauche a une largeur fixe.
- Aide avec div - faites div div ajuster la largeur restante car j'ai besoin de deux colonnes alignées à gauche
html
css
multiple-columns
Anurag Uniyal
la source
la source
overflow hidden
Réponses:
La solution à cela est en fait très facile, mais pas du tout évidente. Vous devez déclencher quelque chose appelé un "contexte de formatage de bloc" (BFC), qui interagit avec les flotteurs d'une manière spécifique.
Prenez simplement ce deuxième div, retirez le flotteur et donnez-le à la
overflow:hidden
place. Toute valeur de débordement autre que visible fait que le bloc sur lequel il est défini devient un BFC. Les BFC n'autorisent pas les flotteurs descendants à leur échapper, pas plus qu'ils ne permettent aux flotteurs frères / ancêtres de s'introduire en eux. L'effet net ici est que le div flotté fera son travail, alors le deuxième div sera un bloc ordinaire, occupant toute la largeur disponible sauf celle occupée par le flotteur .Cela devrait fonctionner sur tous les navigateurs actuels, mais vous devrez peut-être déclencher hasLayout dans IE6 et 7. Je ne m'en souviens pas.
Démos:
la source
Je viens de découvrir la magie des boîtes flexibles (affichage: flex). Essaye ça:
Les boîtes flexibles me donnent le contrôle que j'aurais souhaité avoir depuis 15 ans. C'est enfin là! Plus d'informations: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
la source
flex-grow: 100;
plutôtflex-grow: 1;
?flex-grow:10
et ensuite je définirais #b surflex-grow: 90
#a serait 10% de la largeur de la ligne et #b serait 90% de la largeur de la ligne. Si aucun autre élément n'a un style de largeur flexible, alors peu importe techniquement ce que vous mettez.Solution Flexbox
C'est à cela que sert la
flex-grow
propriété.Remarque: Ajoutez des préfixes de fournisseur flex si requis par les navigateurs pris en charge .
la source
Ce serait un bon exemple de quelque chose de trivial à faire avec des tables et difficile (sinon impossible, au moins dans un sens multi-navigateur) à faire avec CSS.
Si les deux colonnes avaient une largeur fixe, ce serait facile.
Si l'une des colonnes avait une largeur fixe, cela serait légèrement plus difficile mais entièrement réalisable.
Avec les deux colonnes à largeur variable, à mon humble avis, vous devez simplement utiliser un tableau à deux colonnes.
la source
display:none;
en étant autant que possible 100% réactif sur une échelle mobile, il est parfois plus agréable de changer complètement votre conception pour un mobile utilisant l'impression tactile. et le style de bouton.Découvrez cette solution
la source
Utilisation
calc
:Le problème avec cela est que toutes les largeurs doivent être définies explicitement, soit en tant que valeur (px et em fonctionnent correctement), soit en pourcentage de quelque chose qui se définit explicitement.
la source
Ici, cela pourrait aider ...
la source
<div class="clear" style="clear: both; height: 1px; overflow: hidden; font-size:0pt; margin-top: -1px;"></div>
Je ne comprends pas pourquoi les gens sont prêts à travailler si dur pour trouver une solution pure CSS pour des mises en page simples en colonnes qui sont si faciles à utiliser avec l'ancienne
TABLE
balise.Tous les navigateurs ont toujours la logique de disposition des tableaux ... Appelez-moi peut-être un dinosaure, mais je dis que cela vous aide.
Beaucoup moins risqué en termes de compatibilité entre navigateurs également.
la source
media-queries
mettre les deux colonnes l'une au-dessus de l'autre dans les petits appareils, c'est impossible avec l'anciennetable
balise. Pour que cela fonctionne, vous devez appliquerCSS
des styles de tableau. Donc, de nos jours, il est préférable de résoudre ce problèmeCSS
si vous souhaitez une mise en page réactive pour n'importe quelle taille d'écran.Si la largeur de l'autre colonne est fixe, pourquoi ne pas utiliser la
calc
fonction CSS pour tous les navigateurs courants :De cette façon, la largeur de la deuxième ligne sera calculée (c'est-à-dire la largeur restante) et appliquée en conséquence.
la source
css-grid
. Fonctionne également avecposition: fixed
ce qui en fait un choix parfait! Je vous remercie!la source
Vous pouvez essayer la disposition de grille CSS .
la source
flex-grow - Ceci définit la capacité d'un élément flex à se développer si nécessaire. Il accepte une valeur sans unité qui sert de proportion. Il dicte la quantité d'espace disponible à l'intérieur du conteneur flexible que l'article doit occuper.
Si la flex-croissance est réglée sur 1 pour tous les articles, l'espace restant dans le conteneur sera distribué également à tous les enfants. Si l'un des enfants a une valeur de 2, l'espace restant occuperait deux fois plus d'espace que les autres (ou il essaiera, au moins). Voir plus ici
la source
Une implémentation légèrement différente,
Deux panneaux div (contenu + supplémentaire), côte à côte, se
content panel
développent s'ilsextra panel
ne sont pas présents.jsfiddle: http://jsfiddle.net/qLTMf/1722/
la source
Pat - Tu as raison. C'est pourquoi cette solution satisferait à la fois les «dinosaures» et les contemporains. :)
la source
Vous pouvez utiliser la bibliothèque CSS de W3 qui contient une classe appelée
rest
qui fait exactement cela:N'oubliez pas de lier la bibliothèque CSS dans la page
header
:Voici la démo officielle: W3 School Tryit Editor
la source
Je ne sais pas si c'est la réponse à laquelle vous vous attendez, mais pourquoi ne définissez-vous pas la largeur de l'arbre sur 'auto' et la largeur de 'vue' sur 100%?
la source
Jetez un œil aux frameworks de disposition CSS disponibles. Je recommanderais Simpl ou, le cadre Blueprint un peu plus complexe.
Si vous utilisez Simpl (qui implique d'importer un seul fichier simpl.css ), vous pouvez le faire:
, pour une mise en page 50-50, ou:
, pour un 25-75.
C'est si simple.
la source
Merci pour la prise de Simpl.css!
n'oubliez pas d'envelopper toutes vos colonnes
ColumnWrapper
comme ça.Je suis sur le point de publier la version 1.0 de Simpl.css, alors aidez à passer le mot!
la source
J'ai écrit une fonction javascript que j'appelle depuis jQuery $ (document) .ready (). Cela analysera tous les enfants de la division parent et ne mettra à jour que l'enfant le plus à droite.
html
javascript
la source
C'est assez facile à utiliser avec flexbox. Voir l'extrait ci-dessous. J'ai ajouté un conteneur wrapper pour contrôler le flux et définir une hauteur globale. Des frontières ont également été ajoutées pour identifier les éléments. Notez que les divs se développent désormais également sur toute la hauteur, selon les besoins. Les préfixes du fournisseur doivent être utilisés pour flexbox dans un scénario réel car il n'est pas encore entièrement pris en charge.
J'ai développé un outil gratuit pour comprendre et concevoir des mises en page à l'aide de flexbox. Découvrez-le ici: http://algid.com/Flex-Designer
la source
stretch
car c'est la valeur par défaut et pas besoin de rendre le conteneur flexible de l'élément enfant donc ildisplay:flex
est inutile pour les éléments intérieursSi les deux largeurs sont de longueur variable, pourquoi ne calculez-vous pas la largeur avec certains scripts ou côté serveur?
<div style="width: <=% getTreeWidth() %>">Tree</div>
la source