Je suis confronté à un problème d'alignement vertical des éléments lorsqu'un div contient des éléments enfants imbriqués, veuillez vérifier: https://codepen.io/akashpen0501/pen/rNaGgXv
Notez que le conteneur a une hauteur fixe de 200px et je veux que les enfants soient centrés verticalement
Résultat actuel:
Je veux tout aligner divs verticalement au centre, comme Requis:[
<div class="container"> <div>left</div> <div>center<span class="nested child">nested content</span></div> <div>right</div> </div>
.container { display: flex; flex-flow: row; align-items: center; border: 1px solid black; height:200px; } .container div { margin: 10px; padding: 10px; border: 1px solid black; } .container span { display: block; }
Veuillez nous conseiller.
4 Réponses :
essayez align-items: flex-start
sur le conteneur
<div class="container"> <div>left</div> <div>center<span class="nested child">nested content</span></div> <div>right</div> </div>
.container{ display: flex; flex-flow: row; align-items: self-start; border: 1px solid black; } .container div{ margin: 10px; padding: 10px; border: 1px solid black; } .container span{ display: block; }
Notez que le conteneur a une hauteur fixe de 200px et je veux que les enfants soient centrés verticalement, changer en flex-start les amène au sommet du conteneur
<div class="container"> <div>left</div> <div>center<span class="nested child">nested content</span></div> <div>right</div> </div>
.container { display: flex; align-items: flex-start; // <----- here border: 1px solid black; } .container div { margin: 10px; padding: 10px; border: 1px solid black; } .container span { display: block; }
Vous pouvez faire une approximation en utilisant l'alignement de la ligne de base et le pseudo élément. Modifiez baseline
avec center
dans l'exemple ci-dessous pour voir que la gauche / droite restera au même endroit.
<div class="container"> <div>left</div> <div>center<span class="nested child">nested content</span></div> <div>right</div> </div> <div class="container"> <div>left</div> <div>center</div> <div>right</div> </div>
.container { display: flex; flex-flow: row; align-items: baseline; border: 1px solid black; height:200px; background:linear-gradient(red,red) center/100% 1px no-repeat } .container:before { content:""; height:calc(50% + 0.25em) } .container div { margin: 10px; padding: 10px; border: 1px solid black; } .container span { display: block; }
Enveloppez vos composants enfants dans un .children
avec les propriétés suivantes, cela gardera votre contenu aligné verticalement
et horizontalement
à la même hauteur. <div class="container">
<div class=children>
<div>left</div>
<div>center<span class="nested child">nested content</span></div>
<div>right</div>
</div>
</div>
.container {
display: flex;
flex-flow: row;
align-items: center;
border: 1px solid black;
height:200px;
}
.container div {
margin: 10px;
padding: 10px;
border: 1px solid black;
}
.container span {
display: block;
}
.children{
display: flex;
align-items: flex-start;
}
.children{
display: flex;
align-items: flex-start;
}
Vouliez-vous dire aligner horizontalement vers le haut?
@VarshaDhadge: Non, verticalement. Vous remarquerez que le div central est poussé vers le haut (la moitié) pour s'aligner avec les autres divs (gauche et droite)
align-items: center
->align-items: flex-start
?Je recommande cet incroyable guide Flexbox sur css-tricks.com/snippets/ css / a-guide-to-flexbox
@TemaniAfif: Notez que le conteneur a une hauteur fixe de 200px et je veux que les enfants soient centrés verticalement, changer en flex-start les amène au sommet du conteneur. Codepen mis à jour pour refléter un div de hauteur fixe