Comment centrer-aligner un élément flex et droit-aligner un autre en utilisant Flexbox [dupliquer]

cette question a déjà une réponse ici:

  • éléments de flexbox de Centre et de droite 2 réponses

Je suis totalement nouveau à Flexbox et je voulais aligner des boutons, mais je ne pouvais pas voir comment gérer le cas commun avec un bouton aligné au centre et un bouton aligné à droite sur la même ligne, en utilisant seulement Flexbox.

cependant, j'ai trouvé un moyen qui a utilisé un élément invisible aligné à gauche de la même longueur que l'élément aligné à droite et le flex justify-content avec space-between pour faire l'élément central sur la rangée.

Existe-t-il un moyen plus direct avec Flexbox?

css lang-css prettyprint-override">.flexcontainer {
  display: flex;
  justify-content: space-between;
  width: 500px;
  height: 200px;
}
.iteminvisible {
  flex: 0 1 auto;
  width: 100px;
  height: 100px;
  visibility: hidden;
}
.itemcenter {
  flex: 0 1 auto;
  width: 150px;
  height: 100px;
  .itemright {
    flex: 0 1 auto;
    width: 100px;
    height: 100px;
  }
html lang-html prettyprint-override"><div class="flexcontainer">
  <div class="iteminvisible">Other</div>
  <div class="itemcenter">One</div>
  <div class="itemright">Other</div>
</div>
31
demandé sur Michael_B 2015-10-30 23:48:15

3 réponses

L'utilisation de justify-content: space-between avec un élément flex invisible, comme décrit dans votre question, est un bon moyen de réaliser la mise en page que vous voulez. Il suffit de noter que l'élément du milieu ne peut être centré que si les deux éléments de gauche et de droite sont de longueur égale ( voir Démo ).

une autre solution que vous pouvez envisager est auto marges et positionnement absolu . Deux avantages de cette méthode sont pas nécessaire pour la marge supplémentaire et le centrage vrai peut être réalisé indépendamment de la taille des articles. Un inconvénient est que l'article centré est retiré du document flow (qui peut ou non Compter pour vous).

.flexcontainer {
      display: flex;
      justify-content: flex-start;   /* adjustment */
      position: relative;            /* new */
      width: 500px;
      height: 200px;
    }

.itemcenter {
      flex: 0 1 auto;
      width: 150px;
      height: 100px; 
      position: absolute;             /* new */
      left: 50%;
      transform: translateX(-50%);
    }

.itemright {
      flex: 0 1 auto;
      width: 100px;
      height: 100px;
      margin-left: auto;              /* new */
    }
<div class="flexcontainer">
  <div class="itemcenter">One</div>
  <div class="itemright">Other</div>
</div>

plus de détails ici: méthodes pour aligner les éléments Flex le long de l'axe principal (voir les encadrés #62-78).

13
répondu Michael_B 2017-05-23 12:10:29
   .container {
      display: flex;
      flex-direction: column; //this will allow flex-end to move item to the right            
      align-items: center;
   }
   .right-item {
      align-self: flex-end;
   }
10
répondu Dots Me 2016-06-21 19:41:19

D'après ce que je comprends, le bouton que vous voulez" flotter "à droite ne devrait pas être flex: 0 1 auto mais plutôt flex: 0 0 auto . Le premier paramètre dans le style flex dicte si un élément doit croître. Si vous ne voulez pas qu'il remplisse plus d'espace que nécessaire, ne lui dites pas de grandir.

-2
répondu Chaosxmk 2016-03-14 20:33:41