Поскольку вы сказали в комментарии, что чем больше у вас вариантов, тем лучше, вот еще один.
В CSS3 есть две разные так называемые «блочные модели». Один добавляет границу и отступ к ширине блочного элемента, а другой - нет. Вы можете использовать последний, указав
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
Тогда в современных браузерах элемент всегда будет иметь одинаковую ширину. То есть, если вы примените к нему границу при наведении, ширина границы не будет добавляться к общей ширине элемента; граница будет добавлена «внутри» элемента, так сказать. Однако, если я правильно помню, вы должны указать width
явно, чтобы это работало. В данном конкретном случае это, вероятно, не вариант для вас, но вы можете помнить об этом в будущих ситуациях.