Détails
Flexbox : centrer horizontalement et verticalement
Comment centrer un div horizontalement et verticalement dans le conteneur à l'aide de flexbox. Dans l'exemple ci-dessous, je veux que chaque numéro soit placé en dessous de l'autre (en rangées), et centré horizontalement.
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
579
3
Je pense que vous voulez quelque chose comme ce qui suit.
Voir la démo à l'adresse : http://jsfiddle.net/audetwebdesign/tFscL/
Vos éléments
.flex-item
doivent être de niveau bloc (div
au lieu despan
) si vous voulez que la hauteur et le remplissage haut/bas fonctionnent correctement.De plus, dans le fichier
.row
, réglez la largeur surauto
au lieu de100%
.Vos propriétés
.flex-container
sont correctes.Si vous voulez que le
.row
soit centré verticalement dans le port d'affichage, attribuez une hauteur de 100 % àhtml
etbody
, et mettez également à zéro les marges debody
.Notez que
.flex-container
a besoin d'une hauteur pour que l'alignement vertical soit effectif, sinon le conteneur calcule la hauteur minimale nécessaire pour contenir le contenu, qui est inférieure à la hauteur du port d'affichage dans cet exemple.Note de bas de page: Les propriétés
flex-flow
,flex-direction
,flex-wrap
auraient pu rendre cette conception plus facile à mettre en œuvre. Je pense que le conteneur.row
n'est pas nécessaire, sauf si vous voulez ajouter du style autour des éléments (image de fond, bordures, etc.).Une ressource utile est : http://demo.agektmr.com/flexbox/
Comment centrer les éléments verticalement et horizontalement dans Flexbox ?
Vous trouverez ci-dessous deux solutions générales de centrage.
L'une pour les éléments flex alignés verticalement (
flex-direction : column
) et l'autre pour les éléments flex alignés horizontalement (flex-direction : row
).Dans les deux cas, la hauteur des divs centrés peut être variable, indéfinie, inconnue ou autre. La hauteur des divs centrés n’a pas d’importance.
**Voici le code HTML pour les deux cas.
CSS (à l'exclusion des styles décoratifs)
Lorsque les éléments flex sont empilés verticalement:
[!entrer la description de l'image ici][2]][2]
[DEMO](http://jsfiddle.net/8o29y7pd/)
Lorsque les éléments flex sont empilés horizontalement:
Ajustez la règle
flex-direction
du code ci-dessus.[!entrer la description de l'image ici][3]][3]
[DEMO](http://jsfiddle.net/8o29y7pd/3/)
Centrer le contenu des éléments flex
La portée d'un [contexte de mise en forme flex] (https://www.w3.org/TR/css-flexbox-1/#flex-containers) est limitée à une relation parent-enfant. Les descendants d'un conteneur flex au-delà des enfants ne participent pas à la mise en forme flex et ignorent les propriétés flex. Essentiellement, les propriétés flex ne sont pas héritables au-delà des enfants.
Par conséquent, vous devrez toujours appliquer
display : flex
oudisplay : inline-flex
à un élément parent afin d'appliquer les propriétés flex à l'enfant.Pour centrer verticalement et/ou horizontalement un texte ou un autre contenu contenu dans un élément flex, faites de cet élément un conteneur flex (imbriqué) et répétez les règles de centrage.
Plus de détails ici : https://stackoverflow.com/q/25311541/3597276
Vous pouvez également appliquer
margin : auto
à l'élément de contenu de l'élément flexible.Pour en savoir plus sur les marges
auto
de Flex, cliquez ici : [Méthodes d'alignement des éléments Flex] (https://stackoverflow.com/a/33856609/3597276) (voir encadré 56).Centrage de plusieurs lignes d'éléments flex
/h3>
Lorsqu'un conteneur flex comporte plusieurs lignes (en raison de l'habillage), la propriété
align-content
est nécessaire pour l'alignement sur l'axe transversal.Extrait de la spécification:
Plus de détails ici : https://stackoverflow.com/q/42613359/3597276
Support des navigateurs
Flexbox est pris en charge par tous les principaux navigateurs, [sauf IE < 10] (http://caniuse.com/#search=flex). Certaines versions récentes de navigateurs, comme Safari 8 et IE10, nécessitent des [préfixes de fournisseur] (https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix). Pour un moyen rapide d'ajouter des préfixes, utilisez Autoprefixer. Plus de détails dans cette réponse.
Solution de centrage pour les anciens navigateurs
Pour une autre solution de centrage utilisant les propriétés de table et de positionnement CSS, voir cette réponse : https://stackoverflow.com/a/31977476/3597276.
[1] : http://i.stack.imgur.com/zxRPw.png [2] : http://i.stack.imgur.com/9Jbjt.png [3] : http://i.stack.imgur.com/ccTOU.png
N'oubliez pas d'utiliser les attributs spécifiques des navigateurs importants :
align-items : center ; -->
justify-content : center ; -->
Vous pouvez lire ces deux liens pour mieux comprendre flex : http://css-tricks.com/almanac/properties/j/justify-content/ et http://ptb2.me/flexbox/
Bonne chance.