2
votes

Disposition Flexbox: comment définir chaque élément de la même largeur sur plusieurs lignes?

Voici ma démonstration de test dans codepen. J'espère garder la même marge entre les éléments, donc j'utilise flex-grow: 1 pour remplir la surépaisseur.

Cependant, les éléments de la dernière ligne ne semblent pas garder la même largeur que les lignes précédentes. Comment faire?

.row{
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
 }
.col{
  min-width: 160px;
  flex-grow: 1;
  margin: 10px 10px;
  background:#eee;
  height: 120px;
}

C'est ce que je veux, addon utilise flex-grow pour garder la même marge entrez la description de l'image ici


0 commentaires

3 Réponses :


0
votes

votre largeur min. peut tirer div vers la ligne suivante et je le diminue.

et vous devez utiliser flex sur les colonnes et flex-direction sur la ligne

quelque chose comme ceci:

<div class="row">
<div class="col">
a
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
</div>
.row{
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
  flex-direction: row;
 }
.col{
  width: 200px;
 
  margin: 10px 10px;
background:#eee;
 height: 120px;
}

<div class="row">
<div class="col">
a
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
</div>
.row{
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  flex-direction: row;
 }
.col{
  min-width: 200px;
 flex-grow: 1;
  margin: 10px 10px;
background:#eee;
 height: 120px;
 flex: 1;
}

<div class="row">
<div class="col">
a
</div>
<div class="col">
b
</div>
<div class="col">
c
</div>
</div>
.row{
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  flex-direction: row;
 }
.col{
  min-width: 20px;
 flex-grow: 1;
  margin: 10px 10px;
background:#eee;
 height: 120px;
 flex: 1;
}


4 commentaires

merci, mais les articles sont beaucoup qui ne peuvent pas être mis en une seule rangée ... j'avais mis à jour les détails en question


il passera automatiquement à la ligne suivante, mais si vous voulez être sur une ligne, vous devez supprimer min-width.


la largeur minimale est nécessaire et le passage automatique à la ligne suivante est correct. mais j'espère que les articles garderont la même largeur


ok voir tous les résultats. et vous pouvez aussi utiliser max-width



1
votes

J'espère que le code suivant pourra résoudre votre problème.

<div class="row">
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</div>
.row{
  display: flex;
  flex-wrap: wrap;
  background: red;
}
.col{
  flex: 1;
  min-width: calc(33.33% - 30px);
  max-width: calc(33.33% - 30px);
  margin: 10px 15px;
  background:#eee;
  height: 120px;
}


1 commentaires

merci, mais maintenant, chaque ligne est limitée à seulement 3 colonnes, est définie dynamique possible par min-width = 160px



2
votes

Vous pouvez utiliser calc pour définir la propriété width ou flex-based sur calc (33.33% - 30px) code> pour qu'il s'adapte aux marges droite et gauche que vous avez appliquées au col - voir la démo ci-dessous:

<div class="row">
  <div class="col">1</div>
  <div class="col">2</div>
  <div class="col">3</div>
  <div class="col">4</div>
  <div class="col">5</div>
</div>
.row{
  display: flex;
  flex-wrap: wrap;
  background: red;
}
.col{
  flex-basis: calc(33.33% - 30px);
  margin: 10px 15px;
  background:#eee;
  height: 120px;
}


2 commentaires

merci, mais maintenant, chaque ligne est limitée à seulement 3 colonnes, est définie dynamique possible par min-width = 160px


mais si vous avez min-width dans des écrans plus petits, cela cassera cette disposition ...