Для блоков фиксированных размеров (в т.ч. процентах) можно использовать такой принцип https://codepen.io/delphinpro/pen/BWJEgG
Для произвольных размеров придется добавлять дополнительный обертки.
Также на гридах можно легко сделать такую раскладку.
Единственный правильный вариант, это убедить заказчика или чувака который дал это задание в том, что нужно использовать Grid для этой задачи, а остальное - это изобретение колеса с 0. В реальном проекте за любую такую реализацию бьют линейкой по рукам.