Я считаю, что проблема в том, что при попытке переместить 3px длительность .5s слишком велика.
В этом примере вы можете видеть, что таймер .2s более плавный для вашего варианта 3px и что .5sТаймер также плавный при переходе больше пикселей
div {
border-bottom: 1px solid;
display: inline;
}
div:hover {
padding-bottom: 2px;
cursor: pointer;
}
.div1 {
padding-bottom: 5px;
transition: padding-bottom .2s;
}
.div2 {
padding-bottom: 15px;
transition: padding-bottom .5s;
}
<div class="div1">
Hello world 1
</div>
<br/><br/><br/>
<div class="div2">
Hello world 2
</div>