Как можно реализовать вертикальную прокрутку только для одного блока, оставляя другой блок статичным? У меня есть флекс-блок, который содержит заголовок и список. Я хочу, чтобы при достижении этого флекс-блока основной скролл страницы не продолжался, пока не будет прокручен список, при этом заголовок должен оставаться неподвижным. Как это можно осуществить?
Для реализации вертикальной прокрутки (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) - останется статичным, относительно всей страницы во время скрола