J'ai un conteneur flexible avec justify-content: flex-start
. Il y a un débordement sur le côté droit car les articles flexibles prennent moins de place que la taille du conteneur.
Outre la définition d'une largeur explicite sur le conteneur flexible, existe-t-il un moyen d'avoir simplement l'équivalent de width: auto
pour supprimer le débordement?
Si vous voulez dire que vous voulez que le conteneur soit la largeur des articles, plutôt que les articles se développant à la largeur du conteneur ...
Vous pourrez peut-être l'obtenir en modifiant display:flex
à display:inline-flex
Comme suggéré par Mahks, vous pouvez rendre le conteneur flexible en ligne . Mais si la pose en ligne ne convient pas à votre mise en page, une alternative consiste à faire flotter le conteneur flexible (pas les éléments flexibles).
Floats sera rétractable pour s'adapter à leur contenu, et ce n'est pas différent pour un conteneur flexible au niveau du bloc. Un conteneur flexible de niveau en ligne se comporte de la même manière qu'un boîte de bloc en ligne lorsqu'il est disposé dans son contexte de mise en forme en ligne parent, ce qui signifie qu'il se rétrécira également pour s'adapter à son contenu par défaut.
width: min-content
(CSS3 "intrinsèque" par opposition à "extrinsèque")
display: inline-flex
si vous ne vous souciez pas que ce soit en ligne
Si tu utilises width: min-content
sur un paragraphe, le mot le plus long détermine la largeur.
.flex-container {
display: flex;
}
.flex-inline-container {
display: inline-flex;
}
.width-min-content {
width: min-content;
}
.row-direction {
flex-direction: row;
border: 0.0625rem solid #3cf;
}
.col-direction {
flex-direction: column;
border: 0.0625rem solid Magenta;
}
flex
<div class='flex-container row-direction'>
<input />
<input type='datetime-local'>
</div>
<div class='flex-container col-direction'>
<input />
<input type='datetime-local'>
</div>
<br>
flex width: min-content
<div class='flex-container width-min-content row-direction'>
<input />
<input type='datetime-local'>
</div>
<div class='flex-container width-min-content col-direction'>
<input />
<input type='datetime-local'>
</div>
<br>
inline-flex
<div class='flex-inline-container row-direction'>
<input />
<input type='datetime-local'>
</div>
<div class='flex-inline-container col-direction'>
<input />
<input type='datetime-local'>
</div>
pas sûr de votre question, mais:
[~ # ~] démo [~ # ~] : http://jsfiddle.net/jn45P/
il vous suffit d'activer la flexibilité des éléments flexibles à l'aide de flex-grow:1;
pour remplir l'espace
<div class="o">
<div>a</div><div>a</div><div>a</div><div>a</div><div>a</div>
</div>
<div class="o flex">
<div>a</div><div>a</div><div>a</div><div>a</div><div>a</div>
</div>
div.o
{
border:2px red solid;
padding:2px;
width:500px;
flex-direction:row;
display:flex;
justify-content:flex-start;
}
div.o > div
{border:2px red solid;margin:2px;}
div.o.flex > div
{flex:1 1 auto;} /* enable flexibility on the flex-items */