Я пытаюсь гарантировать, что содержимое внутри left-content
div прокручивается, когда содержимое превышает родительскую высоту.
Однако по какой-то причине прокручиваемый контент превышает высоту родительского элемента.
.main-container {
height: 100vh;
display: flex;
flex-direction: column;
background-color: red;
}
.content-container {
display: flex;
flex-wrap: wrap;
flex-grow: 1;
}
.content-container>div {
flex: 1;
}
.content-left {
overflow: scroll;
}
.scrolling-content {
height: 1000px;
background-color: yellow;
}
<div class = "main-container">
<div>Navgation</div>
<div>Notification Bar</div>
<div class = "content-container">
<div class = "content-left">
<div class = "scrolling-content">Scrolling Content</div>
</div>
<div class = "content-right">2</div>
</div>
<div>Footer</div>
</div>
Я создал скрипт, чтобы продемонстрировать свою проблему: https://jsfiddle.net/Lqpnacv7/
Ваша проблема в том, что содержимое выходит за пределы контейнера, но у контейнера нет фиксированной высоты. Таким образом, контейнер не переполняется: контейнер переполняет родительский элемент. Глядя на следующий фрагмент, основной контейнер отмечен переполнением: скрыт, чтобы доказать, что желтый контейнер обрезается.
.main-container{
height: 100vh;
display: flex;
flex-direction: column;
background-color: red;
overflow: hidden;
}
.content-container{
display: flex;
flex-wrap: wrap;
flex-grow: 1;
}
.content-container > div{
flex:1;
}
.content-left{
overflow: scroll;
}
.scrolling-content{
height: 1000px;
background-color: yellow;
}
<div class = "main-container">
<div>Navgation</div>
<div>Notification Bar</div>
<div class = "content-container">
<div class = "content-left">
<div class = "scrolling-content">Scrolling Content</div>
</div>
<div class = "content-right">2</div>
</div>
<div>Footer</div>
</div>
Вот исправление:
.main-container{
height: 100vh;
display: flex;
flex-direction: column;
background-color: red;
}
.content-container{
display: flex;
flex-wrap: wrap;
flex-grow: 1;
height: 100%;
}
.content-container > div{
flex:1;
}
.content-left{
overflow-y: scroll;
height: fit-content;
}
.scrolling-content{
height: 1000px;
background-color: yellow;
}
<div class = "main-container">
<div>Navgation</div>
<div>Notification Bar</div>
<div class = "content-container">
<div class = "content-left">
<div class = "scrolling-content">Scrolling Content</div>
</div>
<div class = "content-right">2</div>
</div>
<div>Footer</div>
</div>
нет ли способа добиться этого, не задавая фиксированную высоту, в идеале я бы хотел, чтобы левый контент заполнял оставшееся пространство?
Я отредактировал первый фрагмент, но можно было бы установить фиксированную высоту, как я лениво сделал height: 100%
Вам нужно определить height
для всех родительских контейнеров и самого левого контейнера, как в моем примере ниже. В противном случае содержимое родительских контейнеров будет адаптироваться к высоте их содержимого, то есть их дочерних контейнеров.
Кроме того, используйте не overflow: scroll
, а overflow: auto
, иначе вы всегда получите и вертикальную, и горизонтальную полосу прокрутки, даже если она не нужна.
.main-container {
height: 100vh;
display: flex;
flex-direction: column;
background-color: red;
}
.content-container {
height: calc(100% - 2.4em);
display: flex;
flex-wrap: wrap;
flex-grow: 1;
}
.content-container>div {
flex: 1;
}
.content-left {
height: 100%;
overflow: auto;
}
.scrolling-content {
height: 1000px;
background-color: yellow;
}
<div class = "main-container">
<div>Navgation</div>
<div>Notification Bar</div>
<div class = "content-container">
<div class = "content-left">
<div class = "scrolling-content">Scrolling Content</div>
</div>
<div class = "content-right">2</div>
</div>
<div>Footer</div>
</div>
Добавьте .content-container { min-height: 0; }
для уменьшения:
body {
margin: 0;
}
.main-container {
height: 100vh;
display: flex;
flex-direction: column;
background-color: red;
}
.content-container {
display: flex;
min-height: 0;
}
.content-container>div {
flex: 1;
}
.content-left {
overflow-y: scroll;
}
.scrolling-content {
height: 1000px;
background-color: yellow;
}
<div class = "main-container">
<div>Navgation</div>
<div>Notification Bar</div>
<div class = "content-container">
<div class = "content-left">
<div class = "scrolling-content">Scrolling Content</div>
</div>
<div class = "content-right">2</div>
</div>
<div>Footer</div>
</div>
на скрипке, которой вы поделились, левый контент - это правильный контент, какому коду мы должны доверять? Сделайте свой снайпер, чтобы мы могли играть с ним прямо в