Используя процентное значение в padding-bottom
значении, процент вычисляется из width
элемента, а не из height
, как можно подумать.
Что означает
padding-bottom: 42.773%; /* (438 × 100 / 1024) */
... всегда будет иметь минимальную высоту, позволяющую отображать необрезанное изображение (которое в вашем случае имеет 1024px
× 438px
).
.min-ratio {
padding-bottom: 42.7%; /* (height × 100 / width) */
background-size: contain;
background-position: bottom center;
background-repeat: no-repeat;
width: 100%;
position: relative;
}
.banner__content {
position: absolute;
background-color: #00000065;
color: white;
top: 0;
bottom: 0;
left: 0;
right: 0;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
padding: 0 3rem;
}
@media(max-width: 600px) {
.banner__content {
position: static;
}
.min-ratio {
background-size: cover;
padding-bottom: 0;
}
}
.banner__content>* {
align-self: stretch;
}
<div class="min-ratio" style="background-image: url(https://media.istockphoto.com/vectors/people-large-group-vector-id519533182)">
<div class="banner__content">
<h1>Compellingly seize high-payoff supply chains</h1>
<h2>Compellingly underwhelm extensive technology rather than low-risk high-yield manufactured products. Phosfluorescently brand just in.</h2>
</div>
</div>
Однако вам нужно будет остановить повторение изображения по вертикали, используя background-repeat:no-repeat
, чтобы когда div становился слишком высоким (например, на мобильном устройстве), он не повторял изображение.
Вышеупомянутая методика позволяет вам установить минимальное отношение для элемента, без необходимости жестко кодировать значения width
или height
в различных @media
интервалах реагирования.
Так как фрагменты стека смотрят вниз, вот скрипка: https://jsfiddle.net/websiter/mek0chne/4/