Можно еще использовать в вашем случае vw, но это если блоки будут занимать всю ширину окна https://jsfiddle.net/7stpe52k/13/ Ну или как чел выше написал, через padding
Вся соль в position, при auto свойство z-index наследуется от родительского блока.
transform: translate добавлен только для сдвига вправо, чтобы было видно как блоки проходят над fixed блоком.
Вы можете задать тегу html размер шрифта 16px. А нужному тексту и элементам задавать размер в rem. При уменьшении окна браузера с помощью медиа запросов уменьшать размер шрифта html, весь остальной текст будет уменьшаться в соответствии с размером шрифта для тега html. Вот, почитайте про относительные размеры https://learn.javascript.ru/css-units#%D0%B5%D0%B4...
Вам надо при клике на блок добавлять к нему класс (например show-block) и потом проверять на его наличие. как-то так
А для плавной анимации замените display на какой-нибудь вариант, из предложенных)