Eu pesquisei um pouco e pelo que descobri você tem quatro opções:
Versão 1: div pai com exibição como célula de tabela
Se você não se importa em usar display:table-cell
no div pai, pode usar uma das seguintes opções:
.area{
height: 100px;
width: 100px;
background: red;
margin:10px;
text-align: center;
display:table-cell;
vertical-align:middle;
}
Demonstração ao vivo
Versão 2: div pai com bloco de exibição e célula de tabela de exibição de conteúdo
.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;
}
Demonstração ao vivo
Versão 3: div flutuante pai e div de conteúdo como célula de tabela de exibição
.area{
background: red;
margin:10px;
text-align: center;
display:block;
float: left;
}
.content {
display:table-cell;
vertical-align:middle;
height: 100px;
width: 100px;
}
Demonstração ao vivo
Versão 4: posição div principal relativa com posição de conteúdo absoluta
O único problema que tive com esta versão é que parece que você terá que criar o css para cada implementação específica. A razão para isso é que o div de conteúdo precisa ter a altura definida que seu texto preencherá e a margem superior será calculada a partir disso. Esse problema pode ser visto na demonstração. Você pode fazer com que funcione para cada cenário manualmente, alterando a% de altura do seu div de conteúdo e multiplicando-o por -.5 para obter o valor da margem 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;
}
Demonstração ao vivo