Если высота блока неизвестна, поможет выставление ему
display: table-cell;
vertical-align: middle;
Однако, тут же вы получите в наследство все особенности работы с ячейками. Например, в FF исчезнет возможность абсолютного позиционирования потомков этого элемента относительно него.