Средства пропорционального масштабирования

Смотрел видеоурок Отзывчивые изображения. В нем с 0:00-10:02 показано как делать отзывчивые картинки. Есть фоновая картинка для сайта и дополнительные. Главная картинка

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

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

Логотип

и гамбургер

Гамбургер

Есть сайт

/* Обнуление */

*,
*::before,
*::after {
  padding: 0;
  margin: 0;
  border: 0;
  box-sizing: border-box;
}

a {
  text-decoration: none;
}

ul,
ol,
li {
  list-style: none;
}

img {
  vertical-align: top;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-weight: inherit;
  font-size: inherit;
}

html,
body {
  height: 100%;
  line-height: 1;
  background: #fafafa;
  font-size: 14px;
  color: #fff;
  font-weight: 400;
  font-family: Poppins;
}

.wrapper {
  min-height: 100%;
  overflow: hidden;
  display: flex;
  flex-direction: column;
}

._container {
  max-width: 1046px;
  padding: 0px 15px;
  margin: 0px auto;
  box-sizing: content-box;
}

._ibg {
  /*
    position: relative;
    padding-bottom: calc(653.95/1309*100%);
    */
}

._ibg img {
  position: absolute;
  max-width: 100%;
  height: 100%;
  top: 0;
  /*left: 0;*/
  right: 0;
  /*left: 0;*/
  object-fit: cover;
  object-position: center;
  /*background-size: cover;*/
  /*z-index: -1;*/
}


/* =========================================================================== */

.page {}

.page__main-block {}

.main-block {
  /*position: relative;*/
  /*
    height: 100vh;
    min-height: 811px;
    */
  max-width: 100%;
  /*text-align: center;*/
}

.main-block__container {
  /*
    background-image: url("../img/mainblock/mainimage.png");
    background-size: cover;
    background-position: bottom center;
    height: 811px;
    */
  /*width: 1441px;*/
  position: relative;
  /*max-width: 100%;*/
  z-index: 2;
}

.main-block__logo {}

.main-block__body {
  /*margin-top: 22px;*/
  /*width: 50%;*/
  /*display: flex;
    flex-direction: column;*/
}


/*
@media (max-width: 100vw) {
    
    .main-block__body {
        display: flex;
        flex: 0 1 50%;
        flex-direction: column;
    }
        
}
*/

.main-block__smalltitle {
  /*position: relative;*/
  height: 21px;
  margin-left: 166px;
  /*right: 83.77%;*/
  /*top: calc(50% - 21px/2 - 195.5px);*/
  margin-top: 130.96px;
  width: 100px;
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 400;
  font-size: 14px;
  line-height: 21px;
  /* identical to box height */
  /*color: #FFFFFF;*/
  /*z-index: 10;*/
}

.main-block__title {
  /*position: absolute;*/
  margin-left: calc(166/1441*100vw);
  width: calc(616/1441*100vw);
  margin-top: 22px;
  /*bottom: 35.68%;*/
  height: 222px;
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 700;
  font-size: 60px;
  line-height: 74px;
  /* or 123% */
  /*color: #FFFFFF;*/
  /*z-index: 10;*/
}

.main-block__text {
  margin-top: 24px;
  margin-left: calc(166/1441*100vw);
  width: calc(581/1441*100vw);
  height: 55px;
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 400;
  font-size: 16px;
  line-height: 26px;
  /*z-index: 10;*/
}

.main-block__items {
  margin-top: 45px;
  margin-left: calc(166/1441*100vw);
  padding-bottom: 170px;
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 400;
  font-size: 16px;
  line-height: 24px;
}

.main-block__link {
  height: 24px;
}

.main-block__link_yellow {
  color: yellow;
}

.main-block__image {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  z-index: 1;
}


/* ============================================================================ */

.main-block__logo_white_triangle {
  width: 42px;
  height: 35px;
  left: 164px;
  top: 27.27px;
  background: #FFFFFF;
  /*transform: matrix(1, 0, 0, -1, 0, 0);*/
}

.main-block__logo_yellow_triangle {
  width: 29.21px;
  height: 24.35px;
  left: 176.78px;
  top: 27.27px;
  background: #F6F6F6
}

.main-block__logo_name {
  width: 179.23px;
  height: 33.05px;
  /*margin-left: calc(230.2/1441*100%);*/
  /*214.8px;*/
  /*margin-top: 24px;*/
  background: #FFFFFF;
  /*z-index: 15;*/
}

.main-block__logo_hamburger_icon {
  /*
    margin-top: 23px;
    margin-right: calc(166/1441*100%);
    */
  width: 40px;
  height: 40px;
  background: #ffffff;
  /*z-index: 15;*/
}

.main-block__header {
  /*
    display: flex;
    justify-content: space-between;
    align-items: center;
    */
  display: flex;
  justify-content: center;
  align-items: center;
}

.main-block__nav {
  padding-top: 42px;
  /*
    margin-left: calc(50% - 1155/(2*1441)*100%);
    margin-right: calc(50% - 1155/(2*1441)*100%);
    */
  /*
    margin-left: auto;
    margin-right: auto;
    */
  max-width: /*calc(1110/1441*100%) 77%*/
  1110px;
  /*1111px*/
  /*flex: 1 1 calc(1155/1441*100%);*/
  margin: auto;
  height: 43px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <link href="https://fonts.googleapis.com/css?family=Poppins:regular,700&display=swap" rel="stylesheet" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="css/style.css">
  <title>Webovio</title>
</head>

<body>
  <div class="wrapper">
    <main class="page">
      <div class="page__main-block main-block">
        <div class="main-block__container">
          <div class="margin-block__header">
            <div class="main-block__nav">
              <!--
                        <img src="img/triangles/white-triangle.png" class="main-block__logo_white_triangle" alt="logoheader">
                        <img src="img/triangles/yellow-triangle.png" class="main-block__logo_yellow_triangle" alt="logoheader">
                        -->
              <!--<div class="main-block__header_image_1">-->
              <img src="https://i.stack.imgur.com/UebFG.png" class="main-block__logo_name" alt="logoname">
              <!--</div>-->
              <!--<div class="main-block__header_image_2"></div>-->
              <img src="https://i.stack.imgur.com/4VkiD.png" class="main-block__logo_hamburger_icon" alt="menulogo">
              <!--</div>-->
            </div>
          </div>
          <div class="main-block__body">
            <div class="main-block__smalltitle">A place where</div>
            <div class="main-block__title">A creative agency for redemptive brands</div>
            <!--
                        <div class="main-block__text">
                            Anteelo is a leading strategic design firm that builds powerful digital solutions for startups and enterprises.
                        </div>
                        -->
            <div class="main-block__items">
              <!--<a href="" class="main-block__link main-block__link_yellow">Get in touch link</a>-->
            </div>
          </div>
        </div>


        <div class="main-block__image _ibg">
          <img src="https://i.stack.imgur.com/PxBpn.png" alt="cover">
        </div>


      </div>
    </main>
  </div>
</body>

</html>

Как сделать так, чтобы главное изображение пропорционально изменялось (отзывчиво)? Пытался использовать max-width - не получилось. Как использовать padding-bottom для задания пропорциональной высоты изображения (к какому объекту применять это свойство) вообще не понял (применительно к данной задаче). Должно быть как на

Внешний вид для верстки

Перечислите все средства пропорционального масштабирования (в контексте данной задачи).


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

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

У вас есть размер картинки, допустим 1366x768. Чтобы она пропорционально сжималась вместе с экраном, вам нужно получить соотношение (ratio), именно соотношение высоты от ширины (т.к. в большинстве случаев у изменения экрана по ширине (высота "прячется" под скроллом)).

Как получить соотношение, делим высоту на ширину 768 / 1366 * 100, округляем и получаем 56.22% - это размер padding-top.

Я обычно использую такую конструкцию, чтобы и блоки внутри расположить спокойно.

body {margin: 0;}

.block {
  display: block;
  width: 100%;
  max-width: 600px; /* ограничение размера блока */
  position: relative;
  /* resize */
  overflow: hidden;
  resize: horizontal;
  /* resize */
}

.block::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;
}
<div class="block">
  <!-- img size 1440x810 -->
  <img src="//i.stack.imgur.com/PxBpn.png">
</div>

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


При помощи min-width или max-width вы можете ограничить минимальную и максимальную ширину блока, т.к. процент будет растягивать его по ширине родителя.


Да в общем понятно. Ваш resize вместе с padding-top конечно очень помог, но для широты представлений прокомментируйте другие методы. А вы смотрели тот видос с 2:00-2:40? Обязательно посмотрите этот промежуток и прокомментируйте здесь. Прокомментируйте пожалуйста этот промежуток, чтоб внести ясность и дать полное представление по всем методам.

Тут ещё проще, смотрите код

.resize {
  min-width: 320px;
  width: 100%;
  max-width: 100%;
  margin: 0 auto;
  overflow: hidden;
  resize: horizontal;
}

.width-100 {
  display: block;
  width: 100%;
}

.width-500px {
  display: block;
  width: 100%;
  max-width: 500px;
  margin: 0 auto;
}
<div class="resize">
  <img class="width-100" src="//via.placeholder.com/400x100?text=400x100">
  <br>
  <img class="width-500px" src="//via.placeholder.com/400x100?text=400x100 | max-width: 500px">
</div>

→ Ссылка