J'ai 2 divisions: une dans le côté gauche et une dans le côté droit de ma page. Celui du côté gauche a une largeur fixe et je veux que celui du côté droit remplisse l'espace restant.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
la source
la source
Réponses:
Cela semble accomplir ce que vous cherchez.
la source
Le problème que j'ai trouvé avec la réponse de Boushley est que si la colonne de droite est plus longue que la gauche, elle s'enroulera autour de la gauche et recommencera à remplir tout l'espace. Ce n'est pas le comportement que je recherchais. Après avoir cherché parmi de nombreuses «solutions», j'ai trouvé un tutoriel (maintenant le lien est mort) sur la création de pages à trois colonnes.
L'auteur propose trois façons différentes, une de largeur fixe, une avec trois colonnes variables et une avec des colonnes externes fixes et un milieu de largeur variable. Beaucoup plus élégant et efficace que les autres exemples que j'ai trouvés. Amélioration significative de ma compréhension de la mise en page CSS.
Fondamentalement, dans le cas simple ci-dessus, faites flotter la première colonne à gauche et donnez-lui une largeur fixe. Donnez ensuite à la colonne de droite une marge gauche un peu plus large que la première colonne. C'est ça. Terminé. Code d'Ala Boushley:
Voici une démo dans Stack Snippets & jsFiddle
Avec l'exemple de Boushley, la colonne de gauche contient l'autre colonne à droite. Dès que la colonne de gauche se termine, la droite recommence à remplir tout l'espace. Ici, la colonne de droite s'aligne simplement plus loin dans la page et la colonne de gauche occupe sa grande marge de gras. Aucune interaction de flux nécessaire.
la source
La solution vient de la propriété display.
Fondamentalement, vous devez faire en sorte que les deux divs agissent comme des cellules de tableau. Ainsi, au lieu d'utiliser
float:left
, vous devrez utiliserdisplay:table-cell
sur les deux divs, et pour la div dynamique de largeur que vous devezwidth:auto;
également définir . Les deux divs doivent être placés dans un conteneur de 100% de largeur avec ladisplay:table
propriété.Voici le css:
Et le HTML:
IMPORTANT: pour Internet Explorer, vous devez spécifier la propriété float sur la largeur dynamique div, sinon l'espace ne sera pas rempli.
J'espère que cela résoudra votre problème. Si vous le souhaitez, vous pouvez lire l'article complet que j'ai écrit à ce sujet sur mon blog .
la source
De nos jours, vous devez utiliser la
flexbox
méthode (peut être adaptée à tous les navigateurs avec un préfixe de navigateur).Plus d'informations: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
la source
Puisque c'est une question plutôt populaire, je suis enclin à partager une belle solution en utilisant BFC.
Échantillon Codepen des éléments suivants ici .
Dans ce cas,
overflow: auto
déclenche le comportement du contexte et fait que l'élément droit ne se développe que sur la largeur restante disponible et il se développera naturellement sur toute la largeur s'il.left
disparaît. Une astuce très utile et propre pour de nombreuses mises en page d'interface utilisateur, mais peut-être difficile de comprendre le "pourquoi cela fonctionne" au début.la source
auto
peut déclencher cela en fonction de son contenu. Vous pouvez également utiliser toute autre valeur de débordement pour obtenir le même effet,hidden
peut mieux fonctionner pour votre cas.Si vous n'avez pas besoin de compatibilité avec les anciennes versions de certains navigateurs (IE
108 ou moins par exemple), vous pouvez utiliser lacalc()
fonction CSS:la source
@ La réponse de Boushley était la plus proche, mais un problème non résolu a été signalé. Le div droit prend toute la largeur du navigateur; le contenu prend la largeur attendue. Pour mieux voir ce problème:
http://jsfiddle.net/79hpS/
Le contenu est au bon endroit (dans Firefox), cependant, la largeur est incorrecte. Lorsque les éléments enfants commencent à hériter de la largeur (par exemple le tableau avec
width: 100%
), une largeur égale à celle du navigateur leur est attribuée, ce qui les fait déborder à droite de la page et crée une barre de défilement horizontale (dans Firefox) ou ne flotte pas et est poussée vers le bas ( en chrome).Vous pouvez résoudre ce problème facilement en l'ajoutant
overflow: hidden
à la colonne de droite. Cela vous donne la largeur correcte pour le contenu et le div. De plus, la table recevra la bonne largeur et remplira la largeur restante disponible.J'ai essayé certaines des autres solutions ci-dessus, elles ne fonctionnaient pas pleinement avec certains cas de bord et étaient tout simplement trop compliquées pour justifier leur correction. Cela fonctionne et c'est simple.
S'il y a des problèmes ou des préoccupations, n'hésitez pas à les signaler.
la source
overflow: hidden
corrige en effet cela, merci. (La réponse marquée est fausse BTW carright
prend en fait tout l'espace disponible sur le parent, vous pouvez le voir dans tous les navigateurs lors de l'inspection des éléments)overflow: hidden
place la colonne de droite dans son propre contexte de formatage de bloc. Les éléments de bloc occupent tout l'espace horizontal à leur disposition. Voir: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…overflow:xxx
attribut est la clé. Comme vous le dites, il cesse#right
de se dilater en dessous#left
. Il résout très bien un problème que je rencontrais avec jQuery UI redimensionnable - avec un#right
ensemble avec un attribut de débordement et#left
défini comme redimensionnable, vous avez une frontière mobile simple. Voir jsfiddle.net/kmbro/khr77h0t .Voici un petit correctif pour la solution acceptée, qui empêche la colonne de droite de tomber sous la colonne de gauche. Remplacé
width: 100%;
paroverflow: hidden;
une solution délicate, si quelqu'un ne le savait pas.http://jsfiddle.net/MHeqG/2600/
[modifier] Consultez également un exemple de disposition à trois colonnes: http://jsfiddle.net/MHeqG/3148/
la source
Si vous essayez de remplir l'espace restant dans une boîte flexible entre 2 éléments, ajoutez la classe suivante à un div vide entre les 2 que vous souhaitez séparer:
la source
Utilisation
display:flex
la source
La réponse de Boushley semble être la meilleure voie à suivre pour organiser cela à l'aide de flotteurs. Cependant, ce n'est pas sans problèmes. L'imbrication flottante dans l'élément développé ne sera pas disponible pour vous; cela cassera la page.
La méthode montrée "en fait faux" quand il s'agit de l'élément en expansion - il n'est pas réellement flottant, il joue juste avec les éléments flottants à largeur fixe en utilisant ses marges.
Le problème est alors exactement cela: l'élément en expansion n'est pas flotté. Si vous essayez d'avoir des éléments flottants imbriqués dans l'élément en expansion, ces éléments flottants "imbriqués" ne sont pas vraiment imbriqués du tout; lorsque vous essayez de coller un
clear: both;
sous vos éléments flottants "imbriqués", vous finirez également par effacer les flotteurs de niveau supérieur.Ensuite, pour utiliser la solution de Boushley, je voudrais ajouter que vous devez placer un div tel que le suivant: .fakeFloat {height: 100%; largeur: 100%; flotteur: gauche; } et placez-le directement dans le div étendu; tout le contenu du div étendu devrait alors aller dans cet élément fakeFloat.
Pour cette raison, je recommande d'utiliser des tableaux dans ce cas spécifique. Les éléments flottants ne sont vraiment pas conçus pour faire l'expansion que vous souhaitez, alors que la solution utilisant une table est triviale. Un argument est généralement avancé selon lequel le flottement est plus approprié pour les mises en page, pas pour les tableaux ... mais vous n'utilisez pas le flottant ici de toute façon, vous le simulez - et ce genre de résultat va à l'encontre de l'objectif de l'argument stylistique pour ce cas spécifique, dans mon humble avis.
la source
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85J'ai essayé les solutions ci-dessus pour une gauche liquide, et une droite fixe mais aucune d'entre elles n'a fonctionné (je sais que la question est pour l'inverse mais je pense que cela est pertinent). Voici ce qui a fonctionné:
la source
J'ai eu un problème similaire et j'ai trouvé la solution ici: https://stackoverflow.com/a/16909141/3934886
La solution est pour une division centrale fixe et des colonnes latérales liquides.
Si vous voulez une colonne gauche fixe, changez simplement la formule en conséquence.
la source
Vous pouvez utiliser les propriétés CSS de la grille, c'est la façon la plus claire, la plus claire et la plus intuitive de structurer vos boîtes.
la source
Je me demande que personne n'a utilisé
position: absolute
avecposition: relative
Donc, une autre solution serait:
HTML
CSS
Exemple Jsfiddle
la source
/ * * css * /
/ * * html * /
la source
J'ai une solution très simple pour cela! // HTML
// CSS
Lien: http://jsfiddle.net/MHeqG/
la source
J'ai eu un problème similaire et j'ai trouvé ce qui a bien fonctionné
CSS:
HTML:
Cette méthode ne se terminera pas lorsque la fenêtre sera réduite, mais étendra automatiquement la zone de «contenu». Il gardera une largeur statique pour le menu du site (à gauche).
Et pour la démonstration de la zone de contenu à expansion automatique et de la zone verticale gauche (menu du site):
https://jsfiddle.net/tidan/332a6qte/
la source
Essayez d'ajouter la position
relative
, la suppressionwidth
et lesfloat
propriétés du côté droit, puis ajoutezleft
et laright
propriété avec une0
valeur.En outre, vous pouvez ajouter une
margin left
règle dont la valeur est basée sur la largeur de l'élément de gauche (+ quelques pixels si vous avez besoin d'espace entre les deux) pour maintenir sa position.Cet exemple fonctionne pour moi:
la source
Essaye ça. Ça a marché pour moi.
la source
Je travaille sur ce problème depuis deux jours et j'ai une solution qui peut fonctionner pour vous et quiconque essaie de créer une largeur fixe réactive à gauche et que le côté droit remplisse le reste de l'écran sans s'enrouler autour du côté gauche. L'intention que je suppose est de rendre la page sensible aux navigateurs ainsi qu'aux appareils mobiles.
Voici le code
Voici mon violon qui peut fonctionner pour vous comme pour moi. https://jsfiddle.net/Larry_Robertson/62LLjapm/
la source
Règles pour les articles et les conteneurs;
Utilisez un espace blanc: nowrap; pour les textes des derniers postes pour leur déstructuration.
Article X% | Article Y% | Article Z%
Longueur totale toujours = 100%!
si
puis
Article X = 70%
L'élément X est dominant (les premiers éléments sont dominants dans la disposition CSS du tableau)!
Essayez max-content; propriété pour div inside pour étendre div dans conteneur:
}
la source
La solution la plus simple consiste à utiliser margin. Ce sera également réactif!
la source
La solution la plus simple consiste à rendre la largeur du div gauche égale à 100% - la largeur du div droit plus toute marge entre eux.
https://codepen.io/tamjk/pen/dybqKBN
la source
J'ai rencontré ce même problème en essayant de mettre en page certains contrôles jqueryUI . Bien que la philosophie commune soit désormais «utiliser
DIV
au lieu deTABLE
", j'ai trouvé dans mon cas que l'utilisation de TABLE fonctionnait beaucoup mieux. En particulier, si vous avez besoin d'un alignement direct entre les deux éléments (par exemple, le centrage vertical, le centrage horizontal, etc.), les options disponibles avec TABLE donnent des commandes simples et intuitives pour cela.Voici ma solution:
la source
<font>
,<b>
etc. HTML Evolved passé moins de se concentrer sur la présentation.overflow
.display:table
pour obtenir l'apparence souhaitée des données non tabulaires est propre. Forcer des données non tabulaires comme des colonnes de page ou des contrôles de formulaire dans des tableaux HTML pour contrôler la mise en page est impur.