Em vez de usar align-self: center
use align-items: center
.
Não há necessidade de alterar flex-direction
ou usar text-align
.
Aqui está o seu código, com um ajuste, para fazer tudo funcionar:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
A align-self
propriedade se aplica aos itens flexíveis . Exceto que o li
item não é um item flexível porque o pai - o ul
- não possui display: flex
ou se display: inline-flex
aplica.
Portanto, ul
não é um contêiner flexível, li
não é um item flexível e align-self
não tem efeito.
A align-items
propriedade é semelhante a align-self
, exceto se aplica a contêineres flexíveis .
Como o li
container é flexível, align-items
pode ser usado para centralizar verticalmente os elementos filhos.
* {
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>
demo codepen
Tecnicamente, aqui está como align-items
e como align-self
funciona ...
A align-items
propriedade (no contêiner) define o valor padrão de align-self
(nos itens). Portanto, align-items: center
significa que todos os itens flexíveis serão definidos como align-self: center
.
Mas você pode substituir esse padrão ajustando os align-self
itens individuais.
Por exemplo, você pode querer colunas de altura igual, para que o contêiner esteja definido como align-items: stretch
. No entanto, um item deve ser fixado na parte superior, para que esteja definido como align-self: flex-start
.
exemplo
Como o texto é um item flexível?
Algumas pessoas podem estar se perguntando como uma sequência de texto ...
<li>This is the text</li>
é um elemento filho do li
.
O motivo é que o texto que não é explicitamente quebrado por um elemento de nível embutido é quebrado por algoritmos por uma caixa embutida. Isso o torna um elemento inline anônimo e filho do pai.
A partir da especificação CSS:
9.2.2.1 Caixas em linha anônimas
Qualquer texto que esteja diretamente contido em um elemento de contêiner de bloco deve ser tratado como um elemento inline anônimo.
A especificação flexbox fornece um comportamento semelhante.
4. Itens Flex
Cada filho em fluxo de um contêiner flexível se torna um item flexível e cada execução contígua de texto que está diretamente contida dentro de um contêiner flexível é agrupada em um item flexível anônimo.
Portanto, o texto no li
é um item flexível.
align-items: baseline
. Bom para diferentes alturas provenientes de diferentes caracteres unicode etc.A resposta mais votada é para resolver esse problema específico publicado pelo OP, onde o conteúdo (texto) estava sendo quebrado dentro de um
inline-block
elemento. Alguns casos podem ser sobre a centralização vertical de um elemento normal dentro de um contêiner , o que também se aplica ao meu caso, portanto, tudo o que você precisa é:fonte
A melhor jogada é apenas aninhar uma caixa flexível dentro de uma caixa flexível . Tudo que você tem a fazer é dar à criança
align-items: center
. Isso alinhará verticalmente o texto dentro de seu pai.fonte
text-align:center
não funciona sozinho. Usealign-items: center
com ele.RESULTADO
HTML
Use em
align-items
vez dealign-self
e eu também adicioneiflex-direction
acolumn
.CSS
fonte
fonte
fonte
Usando
display: flex
você pode controlar o alinhamento vertical dos elementos HTML.fonte
Você pode alterar o
ul
eli
exibe paratable
etable-cell
. Então,vertical-align
funcionaria para você:http://codepen.io/anon/pen/pckvK
fonte