I was having a lot of problems with centering text vertically without using padding. The issue is that when I used padding it displayed differently for different size text and text lines. In my case I had child and parent div elements displaying prices of items. The parent simply displayed a circle border.
I’ve tried many different options but settled on this one:
#parent {display: table;}
#child { display: table-cell; vertical-align: middle; }
It might not work in old versions of IE. But who cares really?