Au lieu d'utiliser align-self: centeruse align-items: center.
Il n'est pas nécessaire de modifier flex-directionou d'utiliser text-align.
Voici votre code, avec un ajustement, pour que tout fonctionne:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
La align-selfpropriété s'applique aux éléments flexibles . Sauf que votre lin'est pas un élément flexible parce que son parent - le ul- n'a pas display: flexou n'a pas display: inline-flexappliqué.
Par conséquent, uln'est pas un conteneur flexible, lin'est pas un élément flexible et align-selfn'a aucun effet.
La align-itemspropriété est similaire à align-self, sauf qu'elle s'applique aux conteneurs flexibles .
Étant donné que le liest un conteneur flexible, align-itemspeut être utilisé pour centrer verticalement les éléments enfants.
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; */
align-items: center;
background: silver;
width: 100%;
height: 20%;
}
<ul>
<li>This is the text</li>
</ul>
démo codepen
Techniquement, voici comment align-itemset align-selftravailler ...
La align-itemspropriété (sur le conteneur) définit la valeur par défaut de align-self(sur les éléments). Par conséquent, align-items: centersignifie que tous les éléments flexibles seront définis sur align-self: center.
Mais vous pouvez remplacer cette valeur par défaut en ajustant les align-selféléments individuels.
Par exemple, vous souhaiterez peut-être des colonnes de hauteur égale, de sorte que le conteneur est défini sur align-items: stretch. Cependant, un élément doit être épinglé en haut, il est donc défini sur align-self: flex-start.
exemple
Comment le texte est-il un élément flexible?
Certaines personnes se demandent peut-être comment une série de textes ...
<li>This is the text</li>
est un élément enfant du li.
La raison en est que le texte qui n'est pas explicitement encapsulé par un élément de niveau en ligne est encapsulé de manière algorithmique par une zone en ligne. Cela en fait un élément en ligne anonyme et un enfant du parent.
De la spécification CSS:
9.2.2.1 Boîtes en ligne anonymes
Tout texte contenu directement dans un élément de conteneur de bloc doit être traité comme un élément en ligne anonyme.
La spécification flexbox prévoit un comportement similaire.
4. Articles flexibles
Chaque enfant entrant d'un conteneur flexible devient un élément flexible et chaque série de texte contiguë contenue directement dans un conteneur flexible est enveloppée dans un élément flexible anonyme.
Par conséquent, le texte dans le liest un élément flexible.
align-items: baseline. Bon pour différentes hauteurs provenant de différents caractères Unicode, etc.