Jeżeli chodzi o zmieniającą się wysokość headera w pionie (portait), a poziomie (landscape), powinieneś rozpatrywać to w następujący sposób:
vh to nic innego jak dynamiczna jednostka oznaczająca % wysokości dostępnego ekranu tj. 1vh = 1%.
W twoim przypadku 18vh = 18% dostępnej wysokości ekranu, stąd przy zmianie orientacji urządzenia na poziomą tego miejsca na header robi się mniej, z czego wniosek jest prosty.
Aby zachować header zawsze takiej samej wysokości możesz ustawić jego wysokość (height: (n)px) na stałą ilość pikseli, a elementy w środku rozmieścić przy pomocy flexa.