Comment faire un div remplir un espace horizontal?
J'ai 2 divs: l'un à gauche et un à droite de ma page. Celui de gauche a une largeur fixe et je veux la une de la côté droit pour remplir l'espace restant.
CSS:
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
HTML:
<div id="search">Text</div>
<div id="navigation">Navigation</div>
- Supprimer la largeur et la propriété float sur le #de navigation et il va fonctionner.
- connexes stackoverflow.com/questions/4873832/...
- vous pourriez vouloir mettre à jour votre réponse choisie à celui fourni par Hank
- en fait, si vous regardez mystrdat de réponse, je pense que c'est encore mieux. C'est une seule ligne de css et c'est la seule qui a fonctionné pour moi (je suis en train de faire trois colonnes avec float:left; sur les deux premiers avec des largeurs fixes et overflow:auto sur le dernier et il fonctionne très bien)
- juste assez. En fait, il semble utiliser la même technique que la réponse que j'ai fournie pour stackoverflow.com/questions/4873832/...
- Découvrez ma réponse quelques lignes ci-dessous. La réponse est: pour combiner
float: left
etoverflow hidden
. Cela va vous donner le vrai "remplir l'espace restant sur le comportement de la colonne de droite. - En 2018,
flex
est souvent la meilleure façon d'aller. Voir @Jordan réponse ci-dessous - stackoverflow.com/a/25117686/846727
Vous devez vous connecter pour publier un commentaire.
Ce qui semble accomplir ce que vous allez pour.
CSS:
HTML:
#right
et vous verrez qu'il ne prend pas le reste de l'espace requis par l'o.p., il prend toute la largeur et apparaît seulement pour le travail, parce#left
au-dessus de lui et le pousse#right
s contenu de la route.Le problème que j'ai trouvé avec Boushley la réponse est que si la colonne de droite est plus longue que celle de gauche, il va juste s'enrouler autour de la gauche et de reprendre remplissant tout l'espace. Ce n'est pas le comportement que je cherchais. Après une recherche par le biais de beaucoup de "solutions", j'ai trouvé ce génial tutoriel sur la création de trois colonne de pages.
L'auteur de l'offre de trois façons différentes, l'une largeur fixe, une avec trois colonnes variables et on fixe les colonnes extérieures et d'une largeur variable moyen. Beaucoup plus élégant et plus efficace que les autres exemples que j'ai trouvé. Considérablement amélioré ma compréhension de la mise en page CSS.
Pour l'essentiel, dans le cas simple ci-dessus, le flotteur de la première colonne à gauche et à lui donner une largeur fixe. Donner ensuite la colonne de droite de gauche de la marge qui est un peu plus large que la première colonne. C'est tout. Fait. Ala Boushley code:
Voici une démo en Pile Extraits de & jsFiddle
CSS:
HTML:
Avec Boushley l'exemple de la colonne de gauche tient l'autre colonne à droite. Dès que la colonne de gauche se termine le droit commence à remplir l'ensemble de l'espace à nouveau. Ici la colonne de droite aligne simplement plus loin dans la page et la colonne de gauche occupe c'est une grosse grosse marge. Pas de flux d'interactions nécessaires.
clear:both;
dans son CSS. Parce que la colonne de gauche est flottant, de nouveaux éléments apparaissent à côté plutôt qu'au-dessous, sauf si vous leur donnez de la propriété clear.padding-left
sur le droitdiv
, vous avez réellement besoin d'augmenter le droitdiv
'smargin-left
par 16 pixels, et garder lepadding-left
trop! (Il ne fonctionne pas sauf si vous avez tous les deux!)margin-left
est la clé pour résoudre ce problème - merci Hank, été JsFiddling ma propre incarnation de cette énigme!La solution vient de l'affichage de la propriété.
Fondamentalement, vous avez besoin de faire les deux divs agissent comme des cellules d'un tableau. Donc, au lieu d'utiliser
float:left
, vous aurez à utiliserdisplay:table-cell
sur les deux divs, et pour la dynamique de la largeur de la div, vous devez définir lewidth:auto;
aussi. Les deux divs doit être placée dans un 100% de la largeur du conteneur avec ladisplay:table
propriété.Voici le css:
Et le code HTML:
IMPORTANT:Pour Internet Explorer, vous devez spécifier le flotteur de la propriété de la dynamique de la largeur de la div, sinon l'espace ne sera pas rempli.
J'espère que cela va résoudre votre problème.
Si vous le souhaitez, vous pouvez lire l'intégralité de l'article que j'ai écrit à ce sujet sur mon blog.
div
n'assument pas les bonnes dimensions, jusqu'à ce que j'ai combiné l'utilisation demin-width
&max-width
avec la valeur souhaitée. Voir le commentaire que j'ai ajouté à la réponse du code. Cette résolu pour moi, dans un cas de test avec 2 vidediv
s. Sinon -- grande réponse! Merci.overflow:hidden
.Puisque c'est plutôt une question populaire, je suis enclin à partager une belle solution à l'aide de BFC.
Codepen échantillon de la suite ici.
Dans ce cas,
overflow: auto
déclenche contexte comportement et permet à la droite de l'élément de développer seulement à la largeur restante et il va naturellement étendre à la totalité de la largeur si.left
disparaît. Très utile et propre truc pour beaucoup de mises en page de l'INTERFACE utilisateur, mais peut-être difficile de comprendre le "pourquoi ça marche" au premier abord.auto
peut déclencher qu'en fonction de son contenu. Vous pouvez également utiliser tout autre dépassement de la valeur pour obtenir le même effet,hidden
peut fonctionner mieux pour votre cas.float: left
de l'ERS div commefloat: right
etoverflow: auto
de la LHS div dans le Codepen exemple ne fonctionne pas.left
àright
devrait fonctionner hors de la boîte. Le flottait élément doit venir en premier dans les DOM.flex-grow: 1
sur l'enfant qui doit être extensible à être une meilleure solution générique.Ces jours-ci, vous devez utiliser le
flexbox
méthode (peut être adapté à tous les navigateurs avec un navigateur préfixe).Plus d'infos: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Si vous n'avez pas besoin de compatibilité avec les anciennes versions de certains navigateurs (IE
108 ou moins, par exemple), vous pouvez utiliser lecalc()
fonction CSS:@Boushley réponse était la plus proche, il reste cependant un problème qui n'est pas traitée qui a été souligné. Le droit div prend toute la largeur du navigateur, le contenu a l'attendu de la largeur. Voir ce problème mieux:
http://jsfiddle.net/79hpS/
Le contenu est à la bonne place (dans Firefox), toutefois, la largeur incorrect. Lorsque les éléments enfants de début d'hériter de la largeur (par exemple, la table avec
width: 100%
) ils sont d'une largeur égale à celle du navigateur, causant un débordement de la droite, en dehors de la page et de créer une barre de défilement horizontale (dans Firefox) ou de ne pas flotter et d'être poussé vers le bas (dans chrome).Vous pouvez résoudre ce facilement en ajoutant
overflow: hidden
de la colonne de droite. Cela vous donne la bonne largeur pour à la fois le contenu et la div. En outre, la table recevrez la bonne largeur et de remplir le reste de la largeur disponible.J'ai essayé quelques autres solutions ci-dessus, ils ne travaillent pas pleinement avec certains cas de bord et ont été tout simplement trop alambiqué pour mandat de les fixer. Cela fonctionne, et c'est simple.
Si il y a des problèmes ou des préoccupations, n'hésitez pas à les élever.
overflow: hidden
en effet résout ce, je vous remercie. (L'marqué réponse est fausse BTW commeright
prend tout l'espace disponible sur le parent, vous pouvez les voir dans tous les navigateurs lors de l'inspection des éléments)overflow: hidden
met la colonne de droite dans son propre bloc de mise en forme de contexte. Les éléments de bloc occuper tout l'espace horizontal disponible pour eux. Voir: developer.mozilla.org/en-US/docs/Web/Guide/CSS/...overflow:xxx
attribut est la clé. Comme vous le dites, il s'arrête#right
de l'expansion de sous#left
. Très soigneusement résout un problème que j'ai à l'aide de jQuery UI resizable - avec#right
ensemble avec un trop plein d'attributs et de#left
définir comme redimensionnable, vous disposez d'une simple mobiliers limite. Voir jsfiddle.net/kmbro/khr77h0t.Voici un petit correctif pour la solution retenue, qui empêche la colonne de droite de tomber sous la colonne de gauche. Remplacé
width: 100%;
avecoverflow: hidden;
un délicat solution, si quelqu'un ne le savait pas.http://jsfiddle.net/MHeqG/2600/
[modifier] vérifiez Aussi un exemple pour les trois colonnes de mise en page:
http://jsfiddle.net/MHeqG/3148/
Utilisation
display:flex
Boushley la réponse semble être la meilleure voie à suivre pour pouvoir le faire à l'aide de flotteurs. Cependant, il n'est pas sans ses problèmes. Imbriquée flottant à l'intérieur de l'élément développé ne sera pas disponible pour vous, elle casse la page.
La méthode indiquée fondamentalement des "faux" quand il s'agit de l'expansion de l'élément - il n'est pas réellement flottant, c'est juste de jouer avec la largeur fixe flottait éléments à l'aide de ses marges.
Le problème ensuite, c'est exactement cela: l'expansion de l'élément n'est pas évoquée. Si vous essayez d'avoir toutes les flottants à l'intérieur de l'expansion de l'élément, ceux qui sont "imbriqués" flotté éléments ne sont pas vraiment imbriquée à tous; lorsque vous essayez de coller une
clear: both;
sous votre "imbriqués" flotté éléments, vous finirez par compensation de haut-niveau de la flotte ainsi.Ensuite, pour utiliser Boushley la solution, je tiens à ajouter que vous devez placer une div telles que les suivantes:
.fakeFloat
{
hauteur: 100%;
width: 100%;
float: left;
}
et les place directement au sein de l'élargissement de la div; tous l'élargissement de la div du contenu devrait aller ensuite à l'intérieur de cette fakeFloat élément.
Pour cette raison, je vous recommande d'utiliser les tableaux dans ce cas précis. Flottait éléments ne sont pas vraiment conçu pour faire de l'extension que vous souhaitez, alors que la solution à l'aide d'un tableau est trivial. Un argument est généralement fait que le flottant est plus approprié pour la mise en page, pas de tables.. mais vous ne l'utilisez pas flottant ici de toute façon, vous êtes semblant - et ce genre de défaites le but de la stylistique argument pour ce cas précis, à mon humble avis.
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85J'ai essayé les solutions ci-dessus pour un reste de liquide, et un fixe droit, mais non de leur travail (je suis conscient que la question est pour l'inverse, mais je pense que c'est pertinent). Voici ce qui a fonctionné:
J'ai eu un problème similaire et j'ai trouvé la solution ici:
https://stackoverflow.com/a/16909141/3934886
La solution, c'est d'un centre fixe div et liquide colonnes latérales.
Si vous voulez un fixe de la colonne de gauche, il suffit de changer la formule en conséquence.
Si vous essayez de remplir l'espace restant dans un flexbox entre 2 éléments, ajouter la classe suivante à une div vide entre les 2 vous souhaitez vous séparer:
Vous pouvez utiliser la Grille des propriétés CSS, est le plus clair, propre et intuitive, la structure de vos boîtes.
CSS:
HTML:
Je me demande ce que personne n'utilisait
position: absolute
avecposition: relative
Donc, une autre solution serait:
HTML
CSS
Jsfiddle exemple
/*
* les css
*/
/*
* html
*/
J'ai une solution très simple pour cela !
//HTML
//CSS
Lien: http://jsfiddle.net/MHeqG/
J'ai eu un problème similaire et est venu avec la suivante qui a bien fonctionné
CSS:
HTML:
Cette méthode de ne pas envelopper lorsque la fenêtre est diminué, mais s'auto développer le contenu de la zone. Il se conserve une largeur statique pour le site (menu sur la gauche).
Et d'auto élargir le contenu de la boîte et à gauche de la boîte verticale(menu du site) démonstration:
https://jsfiddle.net/tidan/332a6qte/
Essayer d'ajouter de la position
relative
, supprimerwidth
etfloat
propriétés de la droite, puis ajouterleft
etright
propriété avec0
valeur.Vous pouvez également ajouter des
margin left
règle avec la valeur est basée sur la gauche de l'élément de largeur (+ quelques pixels si vous avez besoin d'espace entre les deux) de maintenir sa position.Cet exemple est de travailler pour moi:
CSS:
HTML:
De l'essayer. Il a travaillé pour moi.
J'ai travaillé sur ce problème depuis deux jours et avoir une solution qui peut fonctionner pour vous et personne d'autre d'essayer de faire un réactif de largeur Fixe gauche et le côté droit de remplir le reste de l'écran sans enrouler autour du côté gauche. L'intention, je suppose, est de faire la page de réactif dans les navigateurs ainsi que les dispositifs mobiles.
Voici le Code
JS:
CSS:
HTML:
Voici mon violon qui peuvent travailler pour vous comme il l'a fait pour moi.
https://jsfiddle.net/Larry_Robertson/62LLjapm/
html de l'élément de tableau fait par défaut... à Vous de définir la largeur de la table puis les colonnes seront toujours couvrent toute la largeur de la table. Le reste n'est que de l'imagination
Règles pour les éléments et les conteneurs;
Utilisation white-space: nowrap; pour les textes dans les derniers articles pour leur undestructuring.
Élément De X% | Élément De Y% | Élément De Z%
Longueur totale toujours = à 100%!
si
puis
Élément X=70%
Élément X est dominante (premiers éléments sont dominants dans le tableau de mise en page CSS)!
Essayer max-contenu; propriété pour les div à l'intérieur pour la diffusion de div dans le conteneur:
}
J'ai rencontré ce même problème en essayant de mise en page de certains jqueryUI contrôles. Bien que la philosophie commune est aujourd'hui "l'utilisation
DIV
au lieu deTABLE
", j'ai trouvé dans mon cas, à l'aide de la TABLE travaillé beaucoup mieux. En particulier, si vous avez besoin d'avoir de simple alignement dans les deux éléments (par exemple, centrage vertical, horizontal centrage, etc.) les options disponibles avec le TABLEAU de donner des commandes simples et intuitives pour cela.Voici ma solution:
<font>
,<b>
, etc. HTML évolué passé que de se concentrer moins sur la présentation.overflow
.display:table
pour obtenir l'apparence souhaitée de non-tableaux de données est propre. Forcer non des données tabulaires, comme les colonnes de la page ou de contrôles de formulaire en HTML, les tableaux de contrôle de la mise en page est impur.de nouvelles feuilles de style css. Mais j'ai résolu ce problème en utilisant inline-block. check this out: http://learnlayout.com/inline-block.html