Как можно реализовать вертикальную прокрутку только для одного блока, оставляя другой блок статичным? У меня есть флекс-блок, который содержит заголовок и список. Я хочу, чтобы при достижении этого флекс-блока основной скролл страницы не продолжался, пока не будет прокручен список, при этом заголовок должен оставаться неподвижным. Как это можно осуществить?
Для реализации вертикальной прокрутки (overflow-y) для одной части блока, при этом оставляя другой блок статичным, вы можете использовать CSS с flexbox и свойством `overflow`. Вот пример того, как это можно сделать:
### HTML
```html
<div class="flex-container">
<div class="header">Заголовок</div>
<div class="content">
<ul class="scrollable-list">
<li>Элемент 1</li>
<li>Элемент 2</li>
<li>Элемент 3</li>
<li>Элемент 4</li>
<li>Элемент 5</li>
<li>Элемент 6</li>
<li>Элемент 7</li>
<li>Элемент 8</li>
<li>Элемент 9</li>
<li>Элемент 10</li>
<!-- Добавьте больше элементов, если необходимо -->
</ul>
</div>
</div>
```
### CSS
```css
body {
margin: 0;
}
.flex-container {
display: flex;
flex-direction: column;
height: 400px; /* Задайте нужную высоту */
border: 1px solid #ccc;
}
.header {
background-color: #f1f1f1;
padding: 10px;
font-size: 18px;
flex: 0 0 auto; /* Устанавливает фиксированную высоту заголовка */
}
.content {
flex: 1; /* Занимает оставшееся пространство */
overflow-y: auto; /* Включает вертикальную прокрутку */
}
.scrollable-list {
list-style-type: none; /* Убираем маркеры списка */
padding: 0;
margin: 0;
}
```
### Объяснение:
- **Flexbox** используется для создания вертикального макета. Контейнер с классом `.flex-container` задает флекс-контейнер с вертикальной ориентацией (`flex-direction: column`).
- Заголовок (`.header`) остается статичным за счет установки `flex: 0 0 auto`, что позволяет ему занимать только то пространство, которое необходимо, и не растягиваться.
- Блок с классом `.content` занимает оставшееся пространство (`flex: 1`) и получает вертикальную прокрутку с помощью `overflow-y: auto`.
- Список внутри блока `.content` прокручивается, когда количество его элементов превышает высоту доступного пространства.
Теперь при прокрутке страницы сначала будет прокручиваться список, и когда он будет достигнут до конца, прокрутка страницы продолжится.
<html> <head> <style> body{ overflow:hidden; height:100vh; } .overflow{ min-height:100vh overflow-y:auto; } </style> </head> <body> <div class=“overflow”> Content <div> </body> </html>
К примеру , задаем для body фиксированную высоту, которая равна высоте экрана. Внутри него создаем блок со свойством: overflow-y:auto , что позволяет скролить, в случае если контент больше высоты экрана. Таким образом - сама страница остается статичной и неподвижной, а скроллинг происходит только контента внутри блока div.
<html> <head> <style> body{ display:grid; overflow:hidden; height:100vh; grid-template-columns:200px auto; } .no-overflow{ } .overflow{ min-height:100vh overflow-y:auto; } </style> </head> <body> <div class=“no-scroll”> Leftblock </div> <div class=“overflow”> Content <div> </body> </html>
Во втором примере, предварительно сделал сетку на стринце - первый блок (no-overflow) - останется статичным, относительно всей страницы во время скрола