Нужно увеличивать сам блок с фоном через transform: scale(); а родительскому блоку задать oveflow: hidden чтобы обрезать увеличение блока.
Также таким способом через transition можно задать плавность анимации.
Дело в том что contain выставляет background-size больше ста и нельзя узнать какой. На transition можно ставить только цифровое значение. Если выставить на backround-size: 150%, то на маленьких экранах изображение в начале уменьшится (чего не должно быть), а потом при наведении увеличится
mrusklon: Дело в том что background-size: contain может выставить разный размер в зависимости от размеров окна и нельзя поставить точное значение процентов для calc