En lugar de usar el align-self: centeruso align-items: center.
No hay necesidad de cambiar flex-directiono usar text-align.
Aquí está su código, con un ajuste, para que todo funcione:
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-selfpropiedad se aplica a artículos flexibles . Excepto que su lino es un elemento flexible porque su padre - el ul- no tiene display: flexni display: inline-flexaplicado.
Por lo tanto, ulno es un contenedor flexible, lino es un elemento flexible y align-selfno tiene ningún efecto.
La align-itemspropiedad es similar a align-self, excepto que se aplica a contenedores flexibles .
Dado que lies un contenedor flexible, align-itemsse puede utilizar para centrar verticalmente los elementos secundarios.
* {
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>
demostración de codepen
Técnicamente, así es como align-itemsy cómo align-selffunciona ...
La align-itemspropiedad (en el contenedor) establece el valor predeterminado de align-self(en los elementos). Por lo tanto, align-items: centersignifica que todos los elementos flexibles se establecerán en align-self: center.
Pero puede anular este valor predeterminado ajustando los align-selfelementos individuales.
Por ejemplo, es posible que desee columnas de igual altura, por lo que el contenedor se establece en align-items: stretch. Sin embargo, un elemento debe estar fijado en la parte superior, por lo que está configurado en align-self: flex-start.
ejemplo
¿Cómo es el texto un elemento flexible?
Algunas personas pueden preguntarse cómo una serie de textos ...
<li>This is the text</li>
es un elemento hijo de li.
La razón es que el texto que no está envuelto explícitamente por un elemento de nivel en línea está envuelto algorítmicamente por un cuadro en línea. Esto lo convierte en un elemento en línea anónimo y secundario del padre.
De la especificación CSS:
9.2.2.1 Cuadros anónimos en línea
Cualquier texto que esté contenido directamente dentro de un elemento contenedor de bloques debe tratarse como un elemento anónimo en línea.
La especificación flexbox proporciona un comportamiento similar.
4. Artículos flexibles
Cada elemento secundario en flujo de un contenedor flexible se convierte en un elemento flexible, y cada corrida contigua de texto que está contenida directamente dentro de un contenedor flexible se envuelve en un elemento flexible anónimo.
Por lo tanto, el texto en el lies un elemento flexible.
align-items: baseline. Bueno para diferentes alturas provenientes de diferentes caracteres Unicode, etc.