Vertical align middle works, but you will have to use table-cell on your parent element and inline-block on the child.
This solution is not going to work in IE6 & 7.
Yours is the safer way to go for those.
But since you tagged your question with CSS3 and HTML5 I was thinking you don't care.
Here is an example
Tested in:
FF3.5
FF4
Safari 5
Chrome 11 & 12
IE9
HTML
<div class="cn"><div class="inner">your content</div></div>
CSS
div.cn {
display: table-cell;
width: 500px;
height: 500px;
vertical-align: middle;
text-align: center;
}
div.inner {
display: inline-block;
width: 200px;
height: 200px;
text-align: left;
}