Se è una riga di testo e / o immagine, allora è facile da fare. Usa solo:
text-align: center;
vertical-align: middle;
line-height: 90px; /* The same as your div height */
Questo è tutto. Se può essere più righe, allora è un po 'più complicato. Ma ci sono soluzioni su http://pmob.co.uk/ . Cerca "allineamento verticale".
Dal momento che tendono ad essere hack o aggiungere div complicati ... Di solito uso una tabella con una singola cella per farlo ... per renderlo il più semplice possibile.
Aggiornamento per il 2020:
A meno che non sia necessario farlo funzionare su browser precedenti come Internet Explorer 10, è possibile utilizzare flexbox. È ampiamente supportato da tutti i principali browser attuali . Fondamentalmente, il contenitore deve essere specificato come contenitore flessibile, insieme al centraggio lungo il suo asse principale e trasversale:
#container {
display: flex;
justify-content: center;
align-items: center;
}
Per specificare una larghezza fissa per il figlio, che viene chiamato "elemento flessibile":
#content {
flex: 0 0 120px;
}
Esempio: http://jsfiddle.net/2woqsef1/1/
Per ridurre il contenuto, è ancora più semplice: basta rimuovere la flex: ...
linea dall'elemento flessibile e viene automaticamente rimpicciolito.
Esempio: http://jsfiddle.net/2woqsef1/2/
Gli esempi sopra sono stati testati sui principali browser tra cui MS Edge e Internet Explorer 11.
Una nota tecnica se è necessario personalizzarla: all'interno dell'articolo flessibile, poiché questo oggetto flessibile non è un contenitore flessibile stesso, il vecchio modo non flessibile di CSS funziona come previsto. Tuttavia, se si aggiunge un altro oggetto flessibile all'attuale contenitore flessibile, i due oggetti flessibili verranno posizionati orizzontalmente. Per renderli posizionati verticalmente, aggiungere il flex-direction: column;
al contenitore flessibile. Funziona così tra un contenitore flessibile e i suoi elementi figlio immediati .
Esiste un metodo alternativo per eseguire il centraggio: non specificando center
la distribuzione sull'asse principale e trasversale per il contenitore flessibile, ma piuttosto margin: auto
sull'elemento flessibile per occupare tutto lo spazio extra in tutte e quattro le direzioni e i margini uniformemente distribuiti renderà l'oggetto flessibile centrato in tutte le direzioni. Funziona tranne quando ci sono più oggetti flessibili. Inoltre, questa tecnica funziona su MS Edge ma non su Internet Explorer 11.
Aggiornamento 2016/2016:
Può essere fatto più comunemente con transform
e funziona bene anche nei browser più vecchi come Internet Explorer 10 e Internet Explorer 11. Può supportare più righe di testo:
position: relative;
top: 50%;
transform: translateY(-50%);
Esempio: https://jsfiddle.net/wb8u02kL/1/
Per ridurre la larghezza:
La soluzione sopra utilizzata utilizzava una larghezza fissa per l'area del contenuto. Per utilizzare una larghezza con involucro termoretraibile, utilizzare
position: relative;
float: left;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
Esempio: https://jsfiddle.net/wb8u02kL/2/
Se è necessario il supporto per Internet Explorer 10, allora flexbox non funzionerà e il metodo sopra e il line-height
metodo funzionerebbero. Altrimenti, flexbox farebbe il lavoro.
text-align:center
non fa la "parte verticale"?