Esas dos soluciones requieren solo dos elementos anidados.
Primero - Posicionamiento relativo y absoluto si el contenido es estático (centro manual).
.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 para un diseño fluido : para el centro de contenido exacto, utilice el siguiente ejemplo:
.message {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
https://jsfiddle.net/GlupiJas/w3jnjuv0/
Necesita establecer una 'altura mínima' en caso de que el contenido supere el 50% de la altura de la ventana. También puede manipular esta altura con la consulta de medios para dispositivos móviles y tabletas. Pero solo si juegas con un diseño receptivo.
Supongo que podría ir más allá y usar un script simple de JavaScript / JQuery para manipular la altura mínima o la altura fija si es necesario por alguna razón.
En segundo lugar , si el contenido es fluido , también puede usar las propiedades CSS de tabla y celda de tabla con alineación vertical y alineación de texto centrada:
/*in a wrapper*/
display:table;
y
/*in the element inside the wrapper*/
display:table-cell;
vertical-align: middle;
text-align: center;
Funciona y escala a la perfección, a menudo se utiliza como solución de diseño web receptivo con diseños de cuadrícula y consulta de medios que manipulan el ancho del objeto.
.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/
Prefiero la solución de tabla para el centrado exacto del contenido, pero en algunos casos el posicionamiento absoluto relativo funcionará mejor, especialmente si no queremos mantener la proporción exacta de alineación del contenido.