Сделать сайт безе перезагрузки можно с любым бэкэндом, лишь он чистые данные отдавал. Основная реализация все равно будет на клиенте. Тут я бы взял React (потому что лучше его знаю:)).
Пример синтетический, для новичков. Абсолютно негибкий. Подходит только для небольших сайтов на десяток страниц. Ну или для обучения.
Отвечая на ваш вопрос: да, в данной реализации вам придется писать много контроллеров.
DTX: Можно и три, и четыре, и сотню. Только описание кейфреймов увеличится.
Если получится уменьшить количество ключевых кадров - дайте знать, запишу себе в копилку ).
Хотя я может фантазирую :) Ведь автор вопроса поставил задачу весьма неточно.
Его частный случай на картинке в принципе легко реализуется (без учета дополнительных неозвученных условий) codepen.io/anon/pen/OXQJrE?editors=1100
HamSter: Первый вариант - горизонтальный, не то.
Второй - тут от masonry только название. там и флекс-то совершенно не нужен. Тупо блоки разбиты на столбики. Вы мне покажите настоящий пример вертикальных "кирпичиков" на флексах.