Я хочу сделать модальное окно с прокручиваемым списком элементов. Прокручиваемый элемент — это div #content. В нижней части модального окна я хочу иметь нижний колонтитул, который будет выбран из прокручиваемого элемента div. Что я не могу понять для жизни, так это сохранить прокручиваемый div и нижний колонтитул внутри модального div.
Прямо сейчас я получил нижний колонтитул div вне модального, но как мне сделать так, чтобы нижний колонтитул находился внутри модального элемента. Когда вы проверите элементы, вы увидите, что нижний колонтитул находится за пределами модального окна и ниже модального. Я пытался использовать так много приемов CSS, и мне не повезло.
#background {
position: fixed;
width: 100%;
height: 100%;
background-color: black;
}
#modal {
position: absolute;
top: 25%;
left: 25%;
bottom: 25%;
right: 25%;
width: 50%;
height: 50%;
}
#content {
overflow-y: scroll;
height: 100%;
background-color: blue;
}
#footer {
background-color: red;
}<div id = "background">
<div id = "modal">
<div id = "content">
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
</div>
<div id = "footer">
<div>Selected Item</div>
</div>
</div>
</div>Обновлено:
Лучшее решение для устаревших браузеров — заменить высоту в #content на...
#content {
height: calc(100% - 20px);
}
Лучшее решение для IE11 и выше — добавить следующий CSS и удалить высоту из #content. Спасибо @Miro за эти решения.
#modal {
display: flex;
flex-direction: column;
}
#content {
flex: 1;
}
Элемент #content должен быть прокручиваемым.
вы хотите, чтобы нижний колонтитул был всегда виден или при прокрутке был внизу?
Я хотел бы, чтобы нижний колонтитул был всегда виден.
нижний колонтитул уже всегда виден на моем конце
Вы правы, это видно, но когда вы просматриваете элементы и наводите указатель мыши на элемент #modal div, нижний колонтитул находится не внутри элемента, а снаружи и под ним. Я нахожу это странным, так как модальная высота составляет 50%, но с нижним колонтитулом она теперь превышает 50%.
если вы хотите, чтобы он был внутри, вам нужно закрыть содержимое div после нижнего колонтитула
но вы это сделали, просто нужно, чтобы это выглядело более эстетично
Я сделал и я не сделал. Я не хочу ничего вне модального. Я хочу, чтобы все это было спрятано внутри модального окна. Модальная высота составляет 50% окна, и я хочу, чтобы она оставалась такой и не превышала 50% высоты.






Когда я проверяю, #footer не выходит за пределы модального окна на моем конце. Это именно то место, где оно должно быть в соответствии с html. Если вы хотите, чтобы нижний колонтитул также можно было прокручивать, он должен быть внутри #content.
Обновлено: чтобы он работал динамически, вы можете использовать гибкий липкий нижний колонтитул. В противном случае найдите «css только липкий нижний колонтитул» для других решений.
#background {
position: fixed;
width: 100%;
height: 100%;
background-color: grey;
}
#modal {
position: absolute;
top: 25%;
left: 25%;
bottom: 25%;
right: 25%;
width: 50%;
height: 50%;
display: flex;
flex-direction: column;
}
#content {
overflow-y: scroll;
height: 100%;
background-color: blue;
position: relative;
flex: 1;
}
#footer {
background-color: red;
}<div id = "background">
<div id = "modal">
<div id = "content">
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
<div class = "item">Item</div>
</div>
<div id = "footer">
<div>Selected Item</div>
</div>
</div>
</div>Вы правы, это видно, но когда вы проверяете элементы и наводите указатель мыши на элемент #modal div, нижний колонтитул находится не внутри элемента, а снаружи и под ним.
Я нахожу это странным, так как модальная высота составляет 50%, но с нижним колонтитулом она теперь превышает 50%.
Это потому, что вы установили высоту #content на 100%, поэтому он выталкивает нижний колонтитул. вы можете попробовать с height: calc(100% - 20px); на #content, где 20px — высота нижнего колонтитула.
Это работает. Есть ли способ не устанавливать высоту 20 пикселей и сделать высоту нижнего колонтитула динамической?
Спасибо. Это то, что я был после.
Мне непонятно, что именно вы хотите сделать, не могли бы вы уточнить, какой элемент должен быть прокручиваемым?