The above has long been a slightly confusing point since the dawn of the semantic web, when designers and developers moved away from using table elements. If you Google the above, you'll get a mixture of answers, ranging from absolute positioning to negative margins and use of line height. Yet, the simplest answer lies in the past.
For a variable amount of text that you want to centre vertically and horizontally, you can use display: table-cell and vertical-align: middle...