Au lieu d'utiliser align-self: center
use align-items: center
.
Il n'est pas nécessaire de modifier flex-direction
ou 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-self
propriété s'applique aux éléments flexibles . Sauf que votre li
n'est pas un élément flexible parce que son parent - le ul
- n'a pas display: flex
ou n'a pas display: inline-flex
appliqué.
Par conséquent, ul
n'est pas un conteneur flexible, li
n'est pas un élément flexible et align-self
n'a aucun effet.
La align-items
propriété est similaire à align-self
, sauf qu'elle s'applique aux conteneurs flexibles .
Étant donné que le li
est un conteneur flexible, align-items
peut ê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-items
et align-self
travailler ...
La align-items
propriété (sur le conteneur) définit la valeur par défaut de align-self
(sur les éléments). Par conséquent, align-items: center
signifie 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 li
est un élément flexible.
align-items: baseline
. Bon pour différentes hauteurs provenant de différents caractères Unicode, etc.La réponse la plus votée est de résoudre ce problème spécifique publié par OP, où le contenu (texte) était enveloppé dans un
inline-block
élément. Dans certains cas, il peut s'agir de centrer un élément normal verticalement à l'intérieur d'un conteneur , ce qui s'applique également dans mon cas, donc pour cela, tout ce dont vous avez besoin est:la source
La meilleure chose à faire est d' imbriquer simplement une boîte flexible à l'intérieur d'une boîte flexible . Il vous suffit de donner à l'enfant
align-items: center
. Cela alignera verticalement le texte à l'intérieur de son parent.la source
text-align:center
ne fonctionne pas seul. À utiliseralign-items: center
avec.RÉSULTAT
HTML
Utilisez
align-items
au lieu dealign-self
et j'ai également ajoutéflex-direction
àcolumn
.CSS
la source
la source
la source
À l'aide de
display: flex
vous pouvez contrôler l'alignement vertical des éléments HTML.la source
Vous pouvez changer le
ul
etli
affiche àtable
ettable-cell
. Alors,vertical-align
travaillerait pour vous:http://codepen.io/anon/pen/pckvK
la source