He investigado esto un poco y, por lo que he encontrado, tiene cuatro opciones:
Versión 1: div principal con visualización como celda de tabla
Si no le importa usar display:table-cell
en su div principal, puede usar las siguientes opciones:
.area{
height: 100px;
width: 100px;
background: red;
margin:10px;
text-align: center;
display:table-cell;
vertical-align:middle;
}
Demo en vivo
Versión 2: div principal con bloque de visualización y celda de tabla de visualización de contenido
.area{
height: 100px;
width: 100px;
background: red;
margin:10px;
text-align: center;
display:block;
}
.content {
height: 100px;
width: 100px;
display:table-cell;
vertical-align:middle;
}
Demo en vivo
Versión 3: div principal flotante y div de contenido como celda de tabla de visualización
.area{
background: red;
margin:10px;
text-align: center;
display:block;
float: left;
}
.content {
display:table-cell;
vertical-align:middle;
height: 100px;
width: 100px;
}
Demo en vivo
Versión 4: posición div principal relativa con posición de contenido absoluta
El único problema que he tenido con esta versión es que parece que tendrás que crear el CSS para cada implementación específica. La razón de esto es que el div de contenido debe tener la altura establecida que llenará su texto y el margen superior se calculará a partir de eso. Este problema se puede ver en la demostración. Puede hacer que funcione para cada escenario manualmente cambiando el% de altura de su div de contenido y multiplicándolo por -.5 para obtener su valor de margen superior.
.area{
position:relative;
display:block;
height:100px;
width:100px;
border:1px solid black;
background:red;
margin:10px;
}
.content {
position:absolute;
top:50%;
height:50%;
width:100px;
margin-top:-25%;
text-align:center;
}
Demo en vivo