Да. Лучше, конечно, чтобы анимация происходила средствами css (из соображений производительности). Но без js здесь не обойтись — для css имеем только событие hover, если увести мышь с элемента — это отмена события hover, а не новое событие, к сожалению. Поэтому вариант такой — средствами js рассчитывать размеры и присваивать их элементу (через .css, а не .animate), а анимацией будет заниматься css за счет transition. В таком случае, во первых, есть два события, во-вторых, так как анимацию можно проводить в несколько этапов, для каждого из них можно навешивать на объект определенный класс с собственными значениями transition, управляя не только продолжительностью, но и плавностью анимации.