Моя задача растянуть фон на всю ширину body даже при скролле
указывал для фона и 100% и 100vh
vh вообще не имеют отношения к ширине.
Если всё таки речь про высоту, то 100vh очевидно не поможет, потому что это размер вьюпорта, а не контента body.
А вот 100% поможет. И cover тоже поможет.
Но для этого, body не должно быть ограничено вьюпортом или чем-то ещё.
Обычно для body задают
min-height: 100vh
или развлекаются с процентами от html. Но это делают для эффекта липкого футера.
Самое интересное, что по умолчанию body как раз таки растягивается по высоту контента. И соответственно, фон со 100% или cover поступит аналогично (если он не svg, у svg ещё нужно разрешить изменять пропорции).
Так что ищите где перемудрили.