Queste due soluzioni richiedono solo due elementi annidati.
Primo : posizionamento relativo e assoluto se il contenuto è statico (centro manuale).
.black {
position:relative;
min-height:500px;
background:rgba(0,0,0,.5);
}
.message {
position:absolute;
margin: 0 auto;
width: 180px;
top: 45%; bottom:45%; left: 0%; right: 0%;
}
https://jsfiddle.net/GlupiJas/5mv3j171/
o per il design fluido - per l'esatto centro dei contenuti usa invece l'esempio seguente:
.message {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
https://jsfiddle.net/GlupiJas/w3jnjuv0/
È necessario impostare "altezza minima" nel caso in cui il contenuto superi il 50% dell'altezza della finestra. Puoi anche modificare questa altezza con media query per dispositivi mobili e tablet. Ma solo se giochi con il responsive design.
Immagino che potresti andare oltre e utilizzare un semplice script JavaScript / JQuery per manipolare l'altezza minima o l'altezza fissa se ce n'è bisogno per qualche motivo.
Secondo : se il contenuto è fluido, puoi anche utilizzare le proprietà CSS di tabella e cella di tabella con allineamento verticale e allineamento del testo centrato:
/*in a wrapper*/
display:table;
e
/*in the element inside the wrapper*/
display:table-cell;
vertical-align: middle;
text-align: center;
Funziona e scala perfettamente, spesso utilizzato come soluzione di web design reattivo con layout a griglia e media query che manipolano la larghezza dell'oggetto.
.black {
display:table;
height:500px;
width:100%;
background:rgba(0,0,0,.5);
}
.message {
display:table-cell;
vertical-align: middle;
text-align: center;
}
https://jsfiddle.net/GlupiJas/4daf2v36/
Preferisco la soluzione tabella per il centraggio esatto del contenuto, ma in alcuni casi il posizionamento assoluto relativo farà un lavoro migliore, soprattutto se non vogliamo mantenere la proporzione esatta dell'allineamento del contenuto.