Como centralizar a div horizontalmente e verticalmente dentro do contêiner usando o flexbox. No exemplo abaixo, quero cada número abaixo um do outro (em linhas), centralizado 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>
row{
que não tem efeito nas linhas. Se você mudar para.row{
o resultado, será totalmente diferente.Respostas:
Eu acho que você quer algo como o seguinte.
Veja a demonstração em: http://jsfiddle.net/audetwebdesign/tFscL/
Seus
.flex-item
elementos devem estar no nível do bloco (emdiv
vez despan
) se você quiser que a altura e o preenchimento superior / inferior funcionem corretamente.Além disso,
.row
ative a largura para emauto
vez de100%
.Suas
.flex-container
propriedades estão bem.Se você deseja que o
.row
ser centrado verticalmente no porto vista, atribuir altura de 100% ahtml
ebody
, e também de zero asbody
margens.Observe que
.flex-container
precisa de uma altura para ver o efeito do alinhamento vertical; caso contrário, o contêiner calcula a altura mínima necessária para incluir o conteúdo, que é menor que a altura da porta de visualização neste exemplo.Nota de rodapé:
A
flex-flow
,flex-direction
,flex-wrap
propriedades poderia ter feito este projeto mais fácil de implementar. Eu acho que o.row
contêiner não é necessário, a menos que você queira adicionar algum estilo ao redor dos elementos (imagem de plano de fundo, bordas e assim por diante).Um recurso útil é: http://demo.agektmr.com/flexbox/
fonte
Como centralizar elementos verticalmente e horizontalmente no Flexbox
Abaixo estão duas soluções gerais de centralização.
Um para itens flexíveis alinhados verticalmente (
flex-direction: column
) e outro para itens flexíveis alinhados horizontalmente (flex-direction: row
).Nos dois casos, a altura dos divs centralizados pode ser variável, indefinida, desconhecida, qualquer que seja. A altura dos divs centralizados não importa.
Aqui está o HTML para ambos:
CSS (excluindo estilos decorativos)
Quando os itens flexíveis são empilhados verticalmente:
DEMO
Quando os itens flexíveis são empilhados horizontalmente:
Ajuste a
flex-direction
regra do código acima.DEMO
Centralizando o conteúdo dos itens flex
O escopo de um contexto de formatação flexível é limitado a um relacionamento pai-filho. Descendentes de um contêiner flex além dos filhos não participam do layout flex e ignoram as propriedades flex. Essencialmente, as propriedades flexíveis não são herdáveis além dos filhos.
Portanto, você sempre precisará aplicar
display: flex
oudisplay: inline-flex
a um elemento pai para aplicar propriedades flexíveis ao filho.Para centralizar verticalmente e / ou horizontalmente o texto ou outro conteúdo contido em um item flexível, torne o item um contêiner flexível (aninhado) e repita as regras de centralização.
Mais detalhes aqui: Como alinhar verticalmente o texto dentro de uma caixa flexível?
Como alternativa, você pode aplicar
margin: auto
ao elemento de conteúdo do item flexível.Aprenda sobre
auto
margens flexíveis aqui: Métodos para alinhar itens flexíveis (na caixa nº 56).Centralizando várias linhas de itens flexíveis
Quando um contêiner flexível possui várias linhas (devido ao empacotamento), a
align-content
propriedade será necessária para o alinhamento entre eixos.Das especificações:
Mais detalhes aqui: Como o flex-wrap funciona com alinhar-se, alinhar itens e alinhar conteúdo?
Suporte do navegador
O Flexbox é suportado por todos os principais navegadores, exceto o IE <10 . Algumas versões recentes do navegador, como o Safari 8 e o IE10, exigem prefixos de fornecedores . Para uma maneira rápida de adicionar prefixos, use o Autoprefixer . Mais detalhes nesta resposta .
Solução de centralização para navegadores antigos
Para uma solução de centralização alternativa usando propriedades de tabela e posicionamento CSS, consulte esta resposta: https://stackoverflow.com/a/31977476/3597276
fonte
Adicionar
para o elemento contêiner do que você deseja centralizar. Documentação: justificar conteúdo e alinhar itens .
fonte
display: inline-flex
no meu caso, mas essa foi uma edição fácil).Não se esqueça de usar atributos específicos de navegadores importantes:
alinhar itens: centro; ->
justificar conteúdo: centro; ->
Você pode ler estes dois links para entender melhor o flex: http://css-tricks.com/almanac/properties/j/justify-content/ e http://ptb2.me/flexbox/
Boa sorte.
fonte
1 - Defina CSS no div pai como
display: flex;
2 - Defina CSS na div pai como
flex-direction: column;
Note que isso fará com que todo o conteúdo dessa div fique alinhado de cima para baixo. Isso funcionará melhor se a div pai contiver apenas o filho e nada mais.
3 - Defina CSS no div pai como
justify-content: center;
Aqui está um exemplo de como o CSS será:
fonte
Você pode fazer uso de
display: flex; align-items: center; justify-content: center;
no seu componente pai
https://repl.it/repls/TomatoImaginaryInitialization
fonte
diplay: flex;
por seu contêiner emargin:auto;
por seu item, funciona perfeitamente.NOTA: Você precisa configurar o
width
eheight
para ver o efeito.fonte
Se você precisar centralizar um texto em um link, isso funcionará:
fonte
margin: auto
funciona perfeitamente com o flexbox. Centraliza verticalmente e horizontalmente.fonte
RESULTADO:
CÓDIGO
HTML:
CSS:
onde
flex-container
div é usado para centralizar vertical e horizontalmente suarows
div, erows
div é usada para agrupar seus "itens" e ordená-los em uma coluna.fonte
fonte
Usando CSS +
dê uma olhada AQUI
fonte