Ниже приведены два подхода к решению вашей проблемы, добавив значение flex
в контейнер изображения hero
.
Поскольку внешний div
имеет flex-direction: column
, вы можете использовать flex
присваивает детям право определять, будут ли они уменьшаться, расти, оставаться такими же и устанавливать гибкую основу.Смотрите здесь для хорошего разбега: https://css -tricks.com / snippets / css / a-guide-to-flexbox /
Однако вам также необходимо определить некоторый минимумрост вашего героя, потому что вы столкнетесь с двумя проблемами.В приведенных ниже примерах показаны две проблемы, с которыми вы столкнетесь вместе с решением.
Ниже приведены два примера, демонстрирующие проблемы, которые будут возникать при подходе к образу героя.
Сначала добавимизображение героя в качестве адаптивного изображения:
Это позволит сохранить высоту изображения даже на экранах меньшего размера (как бы высота изображения не была равна ширине этого изображения).
Однакона больших экранах необходимо убедиться, что вы используете изображение с достаточной высотой, чтобы заполнить .hero
div.
См. фрагмент кода ниже и обязательно нажмите на «Полная страница», чтобы увидеть дополнительнуюпробел
.container {
height:100vh;
display: flex;
flex-direction: column
}
.nav {
background-color:red;
flex: 0 0 150px;
height: 10%;
}
.hero {
flex: 1 1 0;
}
.img-responsive {
display: block;
max-width: 100%;
width:100%;
}
.variable {
flex: 0 0 auto;
background-color:aqua;
min-height: 405px;
max-height: 600px;
}
<div class='container'>
<div class="nav">
navigation menu (always 150px)u
</div>
<div class='hero'>
<img src="https://via.placeholder.com/1280x200/?text=Hero+Image" class='img-responsive'>
</div>
<div class='variable'>
variable height container can be 400px or 600px depending on what it contains
</div>
</div>
Во-вторых, установка фонового изображения на hero
div
Здесь изображение героя развалится на маленькомэкраны, так как ваша навигация и ваш переменный div высоты будут занимать все пространство.
.container {
height:100vh;
display: flex;
flex-direction: column
}
.nav {
background-color:red;
flex: 0 0 150px;
height: 10%;
}
.hero {
flex: 1 1 0;
background-image: url(https://via.placeholder.com/1280x200/?text=Hero+Image);
background-size: cover;
background-repeat: no-repeat;
background-position: top center;
}
.img-responsive {
display: block;
max-width: 100%;
width:100%;
}
.variable {
flex: 0 0 auto;
background-color:aqua;
min-height: 405px;
max-height: 600px;
}
<div class='container'>
<div class="nav">
navigation menu (always 150px)u
</div>
<div class='hero'>
</div>
<div class='variable'>
variable height container can be 400px or 600px depending on what it contains
</div>
</div>
Решение для любого случая должно включать media queries
, чтобы учесть изменения высоты блока героя в зависимости от размера экрана.Для подхода background-image
вы можете добавить height
к hero
div для соответствия желаемому результату.
Один из возможных подходов
Добавить flex-basis
герою-образу.Я выбрал 200px
и установил значение flex-shrink
на 0
.На больших экранах я просто хочу убедиться, что мое изображение достаточно большое, чтобы не выглядеть растянутым, как здесь.
.container {
height:100vh;
display: flex;
flex-direction: column
}
.nav {
background-color:red;
flex: 0 0 150px;
height: 10%;
}
.hero {
flex: 1 0 200px;
background-image: url(https://via.placeholder.com/1280x200/?text=Hero+Image);
background-size: cover;
background-repeat: no-repeat;
background-position: top center;
}
.img-responsive {
display: block;
max-width: 100%;
width:100%;
}
.variable {
flex: 0 0 auto;
background-color:aqua;
min-height: 405px;
max-height: 600px;
}
<div class='container'>
<div class="nav">
navigation menu (always 150px)u
</div>
<div class='hero'>
<!-- Background Image Approach -->
</div>
<div class='variable'>
variable height container can be 400px or 600px depending on what it contains
</div>
</div>