Mais
Flexbox: centro horizontalmente e verticalmente
Como centralizar divivalmente, e verticalmente dentro do contentor utilizando a flexbox. No exemplo abaixo, quero cada número abaixo um do outro (em filas), que estão centrados horizontalmente.
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
579
3
Acho que você quer algo como o seguinte.
Ver demonstração em: http://jsfiddle.net/audetwebdesign/tFscL/
Seus elementos
.flex-item' devem ser nível de bloco (
div' ao invés de `span') se você quiser que a altura e o estofamento superior/inferior funcionem corretamente.Além disso, em
.row', defina a largura para
auto' ao invés de `100%'.As suas propriedades
.flex-container
são boas.Se você quiser que o
.row' seja centrado verticalmente na porta de visualização, atribua 100% de altura ao
html' e aocorpo', e também zere as margens do
corpo'.Note que `.flex-container' precisa de uma altura para ver o efeito de alinhamento vertical, caso contrário, o recipiente calcula a altura mínima necessária para fechar o conteúdo, que é menor do que a altura da porta de visualização neste exemplo.
Nota de rodapé: As propriedades
flex-flow',
flex-direction',flex-wrap' poderiam ter tornado este design mais fácil de implementar. Eu acho que o
.row' container não é necessário a menos que você queira adicionar algum estilo em torno dos elementos (imagem de fundo, bordas e assim por diante).Um recurso útil é: http://demo.agektmr.com/flexbox/
Como Centralizar Elementos Verticalmente e Horizontalmente no Flexbox
Abaixo estão duas soluções de centralização geral.
Um para itens flexíveis alinhados verticalmente (
flex-direction: column
) e o outro para itens flexíveis alinhados horizontalmente (flex-direction: row
).Em ambos os casos, a altura dos mergulhos centrados pode ser variável, indefinida, desconhecida, o que quer que seja. A altura dos mergulhos centrados não'não importa.
Aqui's o HTML para ambos:
CSS (excluindo estilos decorativos)
Quando os itens flexíveis são empilhados verticalmente:
[**DEMO***](http://jsfiddle.net/8o29y7pd/)
Quando os itens flexíveis são empilhados horizontalmente:
Ajuste a regra `flex-direction' a partir do código acima.
[**DEMO***](http://jsfiddle.net/8o29y7pd/3/)
Centrar o conteúdo dos itens flexíveis
O alcance de um contexto de formatação flex é limitado a uma relação pai-filho. Os descendentes de um recipiente flex além das crianças não participam do layout flex e ignorarão as propriedades flex. Essencialmente, as propriedades flex não são herdáveis para além das crianças.
Portanto, você sempre precisará aplicar
display: flex
oudisplay: inline-flex
a um elemento dos pais para aplicar propriedades flex à criança.Para centrar verticalmente e/ou horizontalmente o texto ou outro conteúdo contido em um item flex, faça do item um container flex (aninhado), e repita as regras de centralização.
Mais detalhes aqui: https://stackoverflow.com/q/25311541/3597276
Alternativamente, você pode aplicar
margin: auto
ao elemento de conteúdo do item flex.Saiba mais sobre as margens flex
auto
aqui: Métodos para Alinhar Itens Flex (ver caixa#56).Centrando múltiplas linhas de itens flexíveis
Quando um recipiente flexível tem múltiplas linhas (devido ao enrolamento) a propriedade "conteúdo de alinhamento" será necessária para o alinhamento entre eixos.
Das especificações:
Mais detalhes aqui: https://stackoverflow.com/q/42613359/3597276
Suporte do navegador
Flexbox é suportado por todos os principais navegadores, exceto IE < 10. Algumas versões recentes de navegadores, como Safari 8 e IE10, requerem prefixos do fornecedor. Para uma forma rápida de adicionar prefixos use Autoprefixer. Mais detalhes em esta resposta.
Solução centralizadora para navegadores mais antigos
Para uma solução alternativa de centralização usando tabela CSS e propriedades de posicionamento veja esta resposta: https://stackoverflow.com/a/31977476/3597276
Don'não se esqueça de usar atributos específicos de navegadores importantes:
align-items: centro; -->
justificar-conteúdo: centro; -->
Você poderia ler estes dois links para melhor entender flex: http://css-tricks.com/almanac/properties/j/justify-content/ e http://ptb2.me/flexbox/
Boa sorte.