cosmic, все имеющиеся на сегодня способы настолько громоздки, условны и неуниверсальны, что <td> с valign=middle по-умолчанию продолжает рулить.
Я как-то пытался прикрутить такую штуку, результат: громоздкая конструкция из 3 или 4 див-ов и три десятка строк цсс-кода с хаками

Плюнул и засунул во внешний контейнер <table height=100% …<td>… , забыв о характере контента внутри ячейки.
С тех пор стараюсь, проектируя интерфейс и рисуя оформиловку, избегать вертикального выравнивания по средине.