Как задавать в % размеры всегда относительно body?
У вас очень размытый вопрос.
Если вас интересуют только %, причем для всех элементов включая текст, то вам помогут viewport единицы, такие как vw(от ширины)/vh(от высоты). То есть блок width: 30vw; height: 20vh; будет всегда занимать 30% от ширины window и 20% от его высоты. Но на этом способе вы максимум только топорный прототип сделаете, и вообще их используют для вещей аля "блок с высотой в весь экран" что эквивалентно 100vh.
Может использовать rem ?