Que extraño, yo mismo lo he probado con el position:absolute y me lo centra perfectamente... ¿No fue por el "%" que el código me lo leía mal? Edité de nuevo el post para mostrarlo mejor con otra etiqueta ya de forma correcta.
En cuanto a tu última duda, no se de otra forma para arreglarlo. Quizá alguien más sepa, aunque necesitarías abrir un nuevo tema para preguntarlo. Suerte