En lugar de usar el align-self: center
uso align-items: center
.
No hay necesidad de cambiar flex-direction
o 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-self
propiedad se aplica a artículos flexibles . Excepto que su li
no es un elemento flexible porque su padre - el ul
- no tiene display: flex
ni display: inline-flex
aplicado.
Por lo tanto, ul
no es un contenedor flexible, li
no es un elemento flexible y align-self
no tiene ningún efecto.
La align-items
propiedad es similar a align-self
, excepto que se aplica a contenedores flexibles .
Dado que li
es un contenedor flexible, align-items
se 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-items
y cómo align-self
funciona ...
La align-items
propiedad (en el contenedor) establece el valor predeterminado de align-self
(en los elementos). Por lo tanto, align-items: center
significa que todos los elementos flexibles se establecerán en align-self: center
.
Pero puede anular este valor predeterminado ajustando los align-self
elementos 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 li
es un elemento flexible.
align-items: baseline
. Bueno para diferentes alturas provenientes de diferentes caracteres Unicode, etc.La respuesta más votada es para resolver este problema específico publicado por OP, donde el contenido (texto) estaba envuelto dentro de un
inline-block
elemento. Algunos casos pueden ser sobre centrar un elemento normal verticalmente dentro de un contenedor , que también se aplica en mi caso, por lo que para eso todo lo que necesita es:fuente
El mejor movimiento es simplemente anidar una caja flexible dentro de una caja flexible . Todo lo que tienes que hacer es darle al niño
align-items: center
. Esto alineará verticalmente el texto dentro de su padre.fuente
text-align:center
no funciona solo Úseloalign-items: center
con él.RESULTADO
HTML
Use en
align-items
lugar dealign-self
y también agreguéflex-direction
acolumn
.CSS
fuente
fuente
fuente
Utilizando
display: flex
puede controlar la alineación vertical de elementos HTML.fuente
Se podría cambiar el
ul
yli
pantallas paratable
ytable-cell
. Entonces,vertical-align
funcionaría para ti:http://codepen.io/anon/pen/pckvK
fuente