Altro
Flexbox: centrare orizzontalmente e verticalmente
Come centrare il div orizzontalmente e verticalmente all'interno del contenitore usando flexbox. Nell'esempio qui sotto, voglio ogni numero sotto l'altro (in righe), che sono centrati orizzontalmente.
.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
Penso che vogliate qualcosa come il seguente.
Vedi la demo su: http://jsfiddle.net/audetwebdesign/tFscL/
I tuoi elementi
.flex-item
dovrebbero essere a livello di blocco (div
invece dispan
) se vuoi che l'altezza e il padding superiore/inferiore funzionino correttamente.Inoltre, su
.row
, imposta la larghezza suauto
invece di100%
.Le tue proprietà
.flex-container
vanno bene.Se vuoi che la
.row
sia centrata verticalmente nella view port, assegna il 100% di altezza ahtml
ebody
, e azzera anche i margini dibody
.Nota che
.flex-container
ha bisogno di un'altezza per vedere l'effetto di allineamento verticale, altrimenti il contenitore calcola l'altezza minima necessaria per racchiudere il contenuto, che è inferiore all'altezza della porta di visualizzazione in questo esempio.Nota a piè di pagina: Le proprietà
flex-flow
,flex-direction
,flex-wrap
avrebbero potuto rendere questo design più facile da implementare. Penso che il contenitore.row
non sia necessario a meno che tu non voglia aggiungere dello stile intorno agli elementi (immagine di sfondo, bordi e così via).Una risorsa utile è: http://demo.agektmr.com/flexbox/
Come centrare gli elementi verticalmente e orizzontalmente in Flexbox
Di seguito ci sono due soluzioni generali di centratura.
Una per gli elementi flex allineati verticalmente (
flex-direction: column
) e l'altra per gli elementi flex allineati orizzontalmente (flex-direction: row
).In entrambi i casi l'altezza dei div centrati può essere variabile, indefinita, sconosciuta, qualsiasi cosa. L'altezza dei div centrati non ha importanza.
Ecco l'HTML per entrambi:
CSS (esclusi gli stili decorativi)
Quando gli elementi flex sono impilati verticalmente:
[DEMO](http://jsfiddle.net/8o29y7pd/)
Quando gli oggetti flessibili sono impilati orizzontalmente:
Adattare la regola
flex-direction
del codice sopra.[DEMO](http://jsfiddle.net/8o29y7pd/3/)
Centrare il contenuto degli elementi flex
Lo scopo di un contesto di formattazione flex è limitato ad una relazione genitore-figlio. I discendenti di un contenitore flex oltre i figli non partecipano al layout flex e ignorano le proprietà flex. Essenzialmente, le proprietà flex non sono ereditabili oltre i figli.
Quindi, avrai sempre bisogno di applicare
display: flex
odisplay: inline-flex
ad un elemento padre per applicare le proprietà flex al figlio.Per centrare verticalmente e/o orizzontalmente il testo o altri contenuti contenuti in un elemento flex, rendere l'elemento un contenitore flex (annidato), e ripetere le regole di centratura.
Maggiori dettagli qui: https://stackoverflow.com/q/25311541/3597276
In alternativa, puoi applicare
margin: auto
all'elemento di contenuto dell'elemento flex.Impara i margini di flex
auto
qui: Methods for Aligning Flex Items (vedi box#56).Centrare più linee di elementi flex
Quando un contenitore flex ha più linee (a causa del wrapping) la proprietà
align-content
sarà necessaria per l'allineamento trasversale.Dalle specifiche:
[**8.4. Imballaggio delle linee Flex: la proprietà
align-content
Maggiori dettagli qui: https://stackoverflow.com/q/42613359/3597276
Supporto browser
/h3>
Flexbox è supportato da tutti i principali browser, tranne IE < 10. Alcune versioni recenti dei browser, come Safari 8 e IE10, richiedono prefissi del fornitore. Per un modo rapido per aggiungere i prefissi, usa Autoprefixer. Maggiori dettagli in questa risposta.
Soluzione di centratura per i vecchi browser
Per una soluzione alternativa di centratura usando le proprietà di posizionamento e di tabella CSS, vedere questa risposta: https://stackoverflow.com/a/31977476/3597276
Non dimenticate di utilizzare importanti attributi specifici per i browser:
align-items: center; -->
justify-content: center; -->
Potresti leggere questi due link per capire meglio flex: http://css-tricks.com/almanac/properties/j/justify-content/ e http://ptb2.me/flexbox/
Buona fortuna.