Не работающее пропорциональное масштабирование и неправильное поведение шапки

Есть фоновая картинка для сайта и дополнительные. Главная картинка

Фоновая картинка

Дополнительные - логотип

Логотип

и гамбургер

Гамбургер

Привожу html и css код

body {
  margin: 0;
  padding: 0;
}

.header {
  background-image: url('https://i.stack.imgur.com/PxBpn.png');
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  width: 100%;
  height: 100vh;
  display: block;
  /*position: relative;*/
  /* resize */
  overflow: hidden;
  resize: horizontal;
  /* resize */
}

.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}

.navigation {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 26px 0;
}

.logo {
  width: 258px;
  height: 40px;
  display: block;
  transition: 0.2s ease;
}

.logo:hover {
  opacity: 0.7;
}

.logo img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.burger {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  background: #fff;
  border-radius: 40px;
  cursor: pointer;
  transition: 0.2s ease;
  display: flex;
  align-items: center;
  justify-content: center;
}

.burger svg {
  transition: 0.2s ease;
}

.burger:hover {
  background: #f0f0f0;
}

.burger:hover svg {
  fill: #555;
}

.header::before {
  content: '';
  display: block;
  width: 100%;
  height: 0;
  padding-top: calc(810 / 1440 * 100%);
}


/*
.block img {
  display: block;
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
}
*/
<header class="header">
  <div class="container">
    <div class="navigation">
      <a href="#" class="logo">
        <img src="https://svgur.com/i/jAx.svg" alt="Logo" />
      </a>
      <div class="burger">
        <svg width="18" height="13" viewBox="0 0 18 13">
          <path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V1.8H18V0H0ZM0 5.4V7.2H18V5.4H0ZM0 12.6V10.8H18V12.6H0Z" />
        </svg>
      </div>
    </div>
  </div>
</header>

  1. Но в результате в полноэкранном виде шапка с логотипом и бургером не отображаются,
  2. При масштабировании логотип и бургер оказываются внизу страницы
  3. и само фоновое изображение не масштабируется

Помогите устранить эти 3 проблемы. Код для пропорционального масштабирования приведен на Средства пропорционального масштабирования - пытался его использовать, но столкнулся с 3-мя вышеобозначенными проблемами. Объясните причины возникших проблем.


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

Автор решения: De.Minov

body {
  margin: 0;
  padding: 0;
}

.header {
  background-image: url('https://i.stack.imgur.com/PxBpn.png');
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center;
  width: 100%;
  display: block;
  position: relative;
}

.container {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
}

.navigation {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 26px 0;
}

.logo {
  width: 258px;
  height: 40px;
  display: block;
  transition: 0.2s ease;
}

.logo:hover {
  opacity: 0.7;
}

.logo img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.burger {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  background: #fff;
  border-radius: 40px;
  cursor: pointer;
  transition: 0.2s ease;
  display: flex;
  align-items: center;
  justify-content: center;
}

.burger svg {
  transition: 0.2s ease;
}

.burger:hover {
  background: #f0f0f0;
}

.burger:hover svg {
  fill: #555;
}

.header::before {
  content: '';
  display: block;
  width: 100%;
  height: 0;
  padding-top: calc(810 / 1440 * 100%);
}
<header class="header">
  <div class="container">
    <div class="navigation">
      <a href="#" class="logo">
        <img src="https://svgur.com/i/jAx.svg" alt="Logo" />
      </a>
      <div class="burger">
        <svg width="18" height="13" viewBox="0 0 18 13">
          <path fill-rule="evenodd" clip-rule="evenodd" d="M0 0V1.8H18V0H0ZM0 5.4V7.2H18V5.4H0ZM0 12.6V10.8H18V12.6H0Z" />
        </svg>
      </div>
    </div>
  </div>
</header>


Объясните причины возникших проблем.

Вы не пытаетесь разобраться что почему случается, не изучили начальные знания по вёрстке и не работаете с "девтулом" браузера.

В прошлом ответе я показал вам как можно добавить блоку пропорциональное изменение размеров, при помощи псевдоэлемента с padding-top равным соотношению ширины и высоты какого-то элемента, в вашем случае фоновой картинки, чей размер 1440x810px.

Т.к. суть этого способа заключается в том, что внутри блока ничего не должно растягивать его по высоте, только ::before {padding-top: ratio}, то все элементы внутри него должны иметь position: absolute; относительно масштабируемого блока (родителя).

А ещё у родителя стоит overflow: hidden.

Если бы вы пользовались девтулом или же имели начальные знания, то решили бы первые две "проблемы".


По поводу третьей.

Опять же всё упирается в начальные знания, а именно в знаниях единиц измерения в CSS.

Вы установили блоку height: 100vh, знаете как ведёт себя vh? Оно выдаст блоку 100% высоты вьюпорта (окна браузера, фрейма и т.п.).

Ещё в прошлом ответе я установил блоку возможность изменять размер resize: horizontal, чтобы продемонстрировать решение с масштабированием.

Вы же впихнули его как готовое решение, что не правильно.

А ответ на решение проблемы такой:

width: 100% - это ровно такая же ширина как и у родителя.
height: 100vh - это ровно такая же высотка как у вьюпорта.
cover - будет растягивать картинку пропорционально так, чтобы не было пустот.

Из-за наличия у header height: 100vh ваша картинка заполнялась так, чтобы быть 100% по высоте, а данная высота не будет изменяться при resize, так что ваша картинка визуально не масштабируется.
Но как только вы начнёте изменять высоту окна браузера, то увидите, что и картинка будет масштабироваться.

→ Ссылка