Есть три блока. Большой, средний и маленький.
Самый большой может увеличиваться в размерах на неизвестную величину.
Самый маленький имеет фиксированную ширину и любую высоту. Если по высоте он меньше среднего блока, то большому блоку он не мешает, и стоит над ним.
Средний имеет фиксированную высоту, но по ширине должен занять все доступное место до маленького блока.
Как на картинке в верхней половине.
Но! Маленький блок может вдруг увеличиться в высоту на неизвестное значение, и в этом случае он должен автоматически переместиться правее большого блока, как на нижней половине картинки.