https://jsfiddle.net/vhem8scs/
Est-il possible d'avoir deux éléments alignés à gauche et un élément aligné à droite avec flexbox? Le lien le montre plus clairement. Le dernier exemple est ce que je veux réaliser.
Dans flexbox, j'ai un bloc de code. Avec float, j'ai quatre blocs de code. C'est une des raisons pour lesquelles je préfère la flexbox.
HTML
<div class="wrap">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
<!-- DESIRED RESULT -->
<div class="result">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
CSS
.wrap {
display: flex;
background: #ccc;
width: 100%;
justify-content: space-between;
}
.result {
background: #ccc;
margin-top: 20px;
}
.result:after {
content: '';
display: table;
clear: both;
}
.result div {
float: left;
}
.result div:last-child {
float: right;
}
Réponses:
Pour aligner un enfant flexible à droite, définissez-le avec
margin-left: auto;
De la spécification flex :
Violon mis à jour
Afficher l'extrait de code
Remarque:
Vous pouvez obtenir un effet similaire en définissant flex-grow: 1 sur l'élément flex central (ou raccourci
flex:1
), ce qui pousserait le dernier élément complètement vers la droite. ( Démo )Cependant, la différence évidente est que l'élément du milieu devient plus gros qu'il ne devrait l'être. Ajoutez une bordure aux éléments flexibles pour voir la différence.
Démo
Afficher l'extrait de code
la source
auto
marge utilise l'espace vide dans le conteneur pour séparer les éléments flexibles. La propriétéflex-grow
/flex
prend cet espace vide, le donne à l'élément flexible, qui se développe de ce montant. Comme mentionné par Danield, cette dernière méthode agrandit l'élément flexible DEUX, ce que vous ne voudrez peut-être pas.div:nth-last-child(4) { margin-left: auto }
codepen.io/danield770/pen/ERyoarPour une option Flexbox pure et concise, regroupez les éléments alignés à gauche et les éléments alignés à droite:
et utiliser
space-between
:De cette façon, vous pouvez regrouper plusieurs éléments vers la droite (ou un seul).
https://jsfiddle.net/c9mkewwv/3/
la source
display: inline;
oudisplay: inline-block;
, ils seront empilés au lieu de tous dans une rangée comme flexbox sinon ils les auraient.One
etTwo
dediv
s àspan
s - si elles étaient encore,display: block;
elles couleraient sur des lignes séparées. Puisque l'OP avait à l'origine desdiv
s, je voulais juste souligner que les mettre simplement dans un autrediv
ne fonctionnerait pas sans changer l'affichage des balises originales.display: flex
n'influence plus leur disposition. Si vous voulez utiliser des div, oui,inline
ouinline-block
cela fonctionnerait. Mais aussi, évidemment,flex
puisque nous l'utilisons par défautflex-direction: row
avec les div parent déjà. ex. jsfiddle.net/ynbb5964/2Pour aligner certains éléments (headerElement) au centre et le dernier élément à droite (headerEnd).
la source