На самом деле нет ничего трудного, задайте блоку-контейнеру position: flex; Дочерним элементам задайте соотношение, например левому и правому блоку flex: 4, а центральному flex: 1; (первый параметр задает свойство grow), потом по ситуации добавьте flex-wrap: wrap, если хотите чтобы ваши блоки шли в разметке "сплошняком" друг за другом и задайте им flex-basis, в зависимости от минимальной ширины контейнера, или оберните каждую строку в отдельный контейнер, а дочерние блоки порадуйте свойством justify-content: space-between;
А когда будет необходимо менять местами правый и левый блок, используйте чудесное свойство order.
Удачи)