Можно внутри прямоугольного дива 2x на x сделать квадратный див x на x с левым полем 0. Задать дивам border-radius: 50%, чтобы они были круглыми. Когда на прямоугольный див нажимают, квадратному диву прописывается дополнительный класс, в котором указано левое поле, равное x. Если при этом у него прописан transition для левого поля (margin-left), то его перемещение будет плавным.