Вы слишком усложняете решение распространенной проблемы. Вы можете сделать это с помощью нескольких простых правил и еще более простого HTML:
<button type="button">test</button>
Добавьте следующий CSS:
button {
padding: 0.3em 0.8em;
border: 1px solid #FFAA22;
background-image: linear-gradient( top, #FFF07E, #FFAA22 );
background-image: -webkit-linear-gradient( top, #FFF07E, #FFAA22 );
background-image: -moz-linear-gradient( top, #FFF07E, #FFAA22 );
border-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
font-size: 1.8em;
}
button:hover {
background-image: linear-gradient( top, #FFF07E, #FFAA22 70% );
background-image: -webkit-linear-gradient( top, #FFF07E, #FFAA22 70% );
background-image: -moz-linear-gradient( top, #FFF07E, #FFAA22 70% );
}
И вы получите тот же результат без изображений или псевдоэлементов. Вы можете добавить простое изменение цвета фона, а также запасной вариант для старых браузеров.
Вот оно действие: http://jsfiddle.net/t9ryJ/1/