Фиксированные элементы в шапке

Столкнулся с такой проблемой, на страницах есть шапка, на одной из страницы добавляется картинка, при скролле она не должна быть фиксированной, а нижний элемент <div class="header__bottom"></div> должен закрепляться к верхнему <div class="header__top"></div>, для примера код ниже как можно решить данную проблему?

    header {
      height: 100%;
    }

    header .header__top {
      height: 30px;
      background: blue;
      width: 100%
    }

    header .header__img {
      height: calc(100vh - 60px);
      background: green;
      width: 100%
    }

    header .header__bottom {
      height: 30px;
      background: yellow;
      width: 100%
    }
.content {
height: 300px;
}
    <header>
      <div class="header__top">Верхний элемент</div>  
      <div class="header__img"></div>  
      <div class="header__bottom">Нижний элемент</div>
    </header>

<div class="content"></div>


Ответы (2 шт):

Автор решения: Максим Степанов

Если использовать js, то просто менять свойство position на fixed, если прокрутка больше высоты картинки, и обратно. Код написал как попало, но идея понятна.

var imgH = $('.header__img').outerHeight();
window.addEventListener('scroll', setHeaderFixed);

function setHeaderFixed() {
  if ($(window).scrollTop() >= imgH - 30) {
    $('.header__bottom').css({position: 'fixed',top: '30px'});
    window.removeEventListener('scroll', setHeaderFixed);
    window.addEventListener('scroll', setHeaderInherit);
  }
}

function setHeaderInherit() {
  if ($(window).scrollTop() < imgH - 30) {
    $('.header__bottom').css({position: 'inherit'});
    window.removeEventListener('scroll', setHeaderInherit);
    window.addEventListener('scroll', setHeaderFixed);
  }
}
body {
  margin: 0;
  padding: 0;
}

header {
  height: 100%;
}

header .header__top {
  height: 30px;
  background: blue;
  width: 100%;
  position: fixed;
}

header .header__img {
  height: calc(100vh - 60px);
  background: green;
  width: 100%
}

header .header__bottom {
  height: 30px;
  background: yellow;
  width: 100%
}

.content {
  height: 800px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script>
<header>
  <div class="header__top">Верхний элемент</div>
  <div class="header__img"></div>
  <div class="header__bottom">Нижний элемент</div>
</header>

<div class="content"></div>

→ Ссылка
Автор решения: NoSkill

.header__top {
  height: 30px;
  background: blue;
  position: -webkit-sticky;
  position: sticky;
  top: 0;
}

.header__img {
  height: calc(100vh - 60px);
  background: green;
}

.header__bottom {
  height: 30px;
  background: yellow;
  position: -webkit-sticky;
  position: sticky;
  top: 30px;
}
    
.content {
  height: 500px;
  background: red;
}
<div class="header__top">Верхний элемент</div>  
<div class="header__img"></div>  
<div class="header__bottom">Нижний элемент</div>

<div class="content">...</div>

→ Ссылка