If you don't need to support IE9-, you can use a flexbox. This will avoid all the positioning hacks and allow you to flow the page naturally.
The display:block and setting the margin to auto is an old horizontal centering technique, the flexbox allows us to add a vertical margin that does the same thing.
<style>
.flexcontainer{
display: flex
}
.centered{
display: block;
margin: auto auto;
height 25px;
}
</style>
<div class="flexcontainer">
<input type="button" class="centered" value="Clicky!" />
</div>