<span> jest elementem liniowym, a dla takich wg. standardu "width" nie powinno być uwzględniane. Rozwiązaniem jest dodanie stylu "display: block", albo lepiej skorzystanie z <div>. który jest domyślnie elementem blokowym. Choć w twoim przypadku faktycznie margin jest zdecydowanie lepszym rozwiązaniem